mysql模块 使用node连接数据库
思路:
1.安装和配置操作MySQL 数据库的第三方模块(mysql)
1.1 安装mysql模块
npm init mysql
1.2 配置mysql模块
//导入mysql模块
const mysql = require('mysql')
//建立和mysql数据库的链接
const db = mysql.createPool({
host: '127.0.0.1', //数据库的IP地址
user: 'root', //登录数据库的账号
password: 'root', //登录数据库的密码
database: 'studyexpress' //要连接的数据库名
})
1.3 检测是否连接到数据库
//检测是否正常连接到数据库
db.query('select 1', (err, res) => {
if (err) return console.log(err.message)
//如果打印出的是[ RowDataPacket { '1': 1 } ],说明正常连接到数据库
console.log(res)
})
2 通过mysql模块操作数据库
可以看到我测试的数据库是这样的
id为主键,自增;status非空默认为0;其他非空
2.1 插入数据
//插入的数据对象
const user = {name:'jhy',password:'2222'}
//待执行的sql语句,?表示占位符
const insertStr = 'insert into users (username,password) values(?,?)'
db.query(insertStr,[user.name,user.password],(err,res) =>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){
console.log('插入数据成功')
}
})
2.2 插入数据的便捷方式
想想如果加入这个对象的属性很多,那不是要把属性一个个写出来吗?这就可以通过以下方法快速插入数据:
//适用场景:字段名必须和数据库表的字段名一致并且除了有默认的字段和自增的字段不能有缺省(不然是插入不成功的)
const user = {username:'qsl',password:'111'}
const insertStr = 'insert into users set ?'
db.query(insertStr,user,(err,res) =>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){
console.log('快速插入成功')
}
})
2.3 查询数据
const sqlStr = 'select * from users'
db.query(sqlStr, (err, res) => {
if (err) return console.log(err.message)
//查询成功,返回结果
console.log(res)
})
2.4 更新数据
const user = {id:7,name:'aaa',pwd:'0000'}
const updateStr = 'update users set username=?,password=? where id=?'
db.query(updateStr,[user.name,user.pwd,user.id],(err,res) =>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){
console.log('更新数据成功')
}
})
2.5 更新数据的便捷方式
//(字段可以缺省,倒是不能和数据库字段名不对应)
const user = {id:7,username:'bbb'}
const updateStr = 'update users set ? where id=?'
db.query(updateStr,[user,user.id],(err,res) =>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){
console.log('更新数据成功')
}
})
2.6 删除数据
const deleteStr = 'delete from users where id=?'
db.query(deleteStr,5,(err,res) =>{
if(err) return console.log(err.message)
if(res.affectedRows === 1){
console.log("删除数据成功")
}
})
2.7 标记删除
使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于 status 这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的 status 字段标记为删除即可。
const markdelete = 'update users set status=? where id =?'
db.query(markdelete, [1, 4], (err, res) => {
if (err) return console.log(err.message)
if (res.affectedRows === 1) {
console.log("标记删除数据成功")
}
})