利用MySQL模块在node.js中的增、删、改、查。

67 阅读3分钟

1.安装MySQL模块

MySQL模块是托管于npm上的第三方模块。它提供了在node.js项目中连接和操作MySQL数据库的能力。如果我们想要在项目中使用它,必须将MySQL模块安装为项目依赖包。

//将MySQL模块安装为项目依赖包
npm install mysql

2.导入MySQL模块

const mysql = require("mysql");

3.与MySQL数据库建立连接

//与MySQL数据库建立连接
const database = mysql.createConnection({
  //MySQL的IP地址
  host: "127.0.0.1",
  //登录数据库的用户名
  user: "root",
  //登录时的密码
  password: "yydssyh123",
  //指定要操纵的是哪一个数据库
  database: "my_db_01",
});

4.测试MySQL模块是否正常工作

//首先测试MySQL模块是否能正常工作
database.query("select 1", (err, results) => {
  //如果报错,说明工作异常
  if (err) {
    //返回错误信息
    return console.log(err.message);
  }
  //如果没报错,则执行以下代码
  //如果打印出了 [RowDataPacket {'1' : 1}] 说明MySQL模块工作正常,并且已经与数据库建立连接
  console.log(results);
});

5.对MySQL数据库上的数据进行查询

//对my_db_01数据库中的users表进行数据的查询
const sqlStr1 = "select * from users";
//调用database.query() 函数指定要执行的SQL语句,并通过回调函数拿到结果
database.query(sqlStr1, (err, results) => {
  if (err) {
    return console.log(err.message);
  }
  //如果执行的是查询语句(select) 则执行的结果(results)是数组
  console.log(results);
});

6.对MySQL数据库上的数据进行插入

//对my_db_01数据库中的users表进行数据的插入
const user = { username: "Tom", password: "1595994587" };
//指定要执行的SQL语句
//SQL语句中英文的? 表示占位符
const sqlStr2 = "insert into users (username,password) values (? ,?)";
database.query(sqlStr2, [user.username, user.password], (err, results) => {
  if (err) {
    return console.log(err.message);
  }
  //如果执行的是插入语句(inert into),则results返回的结果是一个对象
  //而results对象中有一个affectedRows 属性,用来判断数据是否插入成功
  if (results.affectedRows === 1) {
    console.log("数据插入成功");
  }
});

在向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过一下便捷方式进行数据的插入

//数据插入的简便写法
const user = { username: "Amy", password: "7724" };
//定义要执行的SQL语句字符串
//英文的 ? 表示占位符
const sqlStr3 = "insert into users set ?";
//调用database.query()函数,执行SQL的插入语句,并返回结果
//直接将user对象当作占位符 ? 的值
database.query(sqlStr3, user, (err, results) => {
  if (err) {
    return console.log(err.message);
  }
  //由于是查询语句,所以results返回的是一个对象
  if (results.affectedRows === 1) {
    console.log("利用简便写法,将数据插入成功");
  }
});

7.对MySQL数据库上的数据进行更新

const user = {id:7,username:'aaaa',password:'666'};
//定义SQL的更新语句字符串
const sqlStr4 = 'uodate users set username=?,password=? where id=?';
database.query(sqlStr4,[user.username,user.password,user.id],(err,results) => {
  if(err) {
    return console.log(err.message);
  }
  if(results.affectedRows === 1) {
    console.log("数据更新成功");
  }
})

更新表数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速更新表数据:

//更新旧数据
const user = { id: "1", username: "aaaa", password: "666" };
//定义SQL的更新语句字符串
const sqlStr5 = "update users set ? where id=?";
//执行SQL语句
database.query(sqlStr5, [user, user.id], (err, results) => {
  if (err) {
    return console.log(err.message);
  }
  //更新语句update 返回的results也是一个对象
  if (results.affectedRows === 1) {
    console.log("数据更新成功");
  }
});

8.对MySQL数据库上的数据进行删除

//删除id = 5 的用户
const sqlStr6 = "delete from users where id=?";
database.query(sqlStr6, 5, (err, results) => {
  if (err) {
    return console.log(err.message);
  }
  if (results.affectedRows === 1) {
    console.log("id为5 的数据删除成功");
  }
});

9.标记删除法

使用delete语句时,会把数据从表中真正的删除,为了保险起见最好还是使用标记删除法。

//标记删除法
const sqlStr6 = "update users set status=? where id=?";
database.query(sqlStr6, [1, 6], (err, results) => {
  if (err) {
    return console.log(err.message);
  }
  if (results.affectedRows === 1) {
    console.log("标记清除成功");
  }
});