在项目中操作MySQL

129 阅读3分钟
安装mysql模块

执行命令npm install mysql

配置与测试
// 1.导入mysql模块
const mysql = require('mysql')
// 2.建立与MySQL数据库的连接关系
const db = mysql.createPool({
  host:'127.0.0.1',  //数据库的IP地址
  user:'root',  //登录数据库的账号
  password:'admin123',  //登录数据库的密码
  database:'my_db_01',  // 指定要操作哪个数据库
})
//测试mysql模块能否正常工作
db.query('select 1',(err,results)=>{
  // mysql模块工作期间报错了
  if(err) return console.log(err.message);
  // 能够成功的执行SQL语句
  console.log(results);
})

当结果为这样时,表明测试成功 图片.png

查询数据
// 查询users表中所有的数据
db.query('select * from users',(err,results)=> {
  //查询数据失败
  if(err) return console.log(err.message);
  //查询成功
  //注意:如果执行的是select查询语句,则执行的结果是数组
  console.log(results);
})

结果为

图片.png

插入数据
第一种方法
//向users表中,新增一条数据,其中username的值为Ben,password的值为468021
const user = {username:'Ben',password:'468021'}
// 定义待执行的SQL语句  ?为占位符
const sqlStr = 'insert into users (username,password) values(?,?)'
// 执行SQL语句
//使用数组的形式,依次为?占位符指定具体的值
db.query(sqlStr,[user.username,user.password],(err,results)=>{
  //执行SQL语句失败
  if(err) return console.log(err.message);
  //执行成功
  //注意:如果执行的是insert into插入语句,则results是一个对象
  //可以通过affectedRows属性,来判断是否插入数据成功
  if(results.affectedRows === 1) {
    console.log('插入数据成功');
  }
})

图片.png

同时在数据库中也能查到新增的数据

图片.png

第二种方法(便捷方式)
const user = {username:'Austin',password:'aus432'}
const sqlStr = 'insert into users set ?'
db.query(sqlStr,user,(err,results)=>{
  if(err) return console.log(err.message);
  if(results.affectedRows === 1) {
    console.log('插入数据成功');
  }
})
更新数据
第一种写法
// 更新用户信息
const user = {id:12,username:'terry',password:'qwe123'}
//定义SQL语句
const sqlStr = 'update users set username=?, password=? where id=?'
// 执行SQL语句
db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{
  if(err) return console.log(err.message);
  if(results.affectedRows === 1) {
    console.log('更新成功');
  }
})

图片.png

图片.png

第二种写法(便捷方式)
const user = {id:7,username:'charels',password:'cha123'}
const sqlStr = 'update users set ? where id=?'
db.query(sqlStr,[user,user.id],(err,results)=>{
  if(err) return console.log(err.message);
  if(results.affectedRows === 1) {
    console.log('更新成功');
  }
})
删除数据
// 删除用户信息
const sqlStr = 'delete from users where id=?'
//注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
//      如果SQL语句中只有一个占位符,则可以省略数组
db.query(sqlStr,8,(err,results)=>{
  if(err) return console.log(err.message);
  if(results.affectedRows === 1) {
    console.log('删除成功');
  }
})

图片.png

标记删除

使用DELETE语句会把真正的数据从表中删除掉,为了保险起见,推荐使用标记删除的形式来模拟删除的动作
所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记这条数据是否被删除
当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可。

const sqlStr = 'update users set status=? where id=?'
db.query(sqlStr,[1,10],(err,results)=>{
  if(err) return console.log(err.message);
  if(results.affectedRows === 1) {
    console.log('标记删除成功');
  }
})

图片.png

删除是一个危险的动作,操作时要慎重