在项目中操作数据库的步骤

①安装操作MySQL数据库的第三方模块(mysql)
②通过mysql模块连接到MySQL数据库
③通过mysql模块执行SQL 语句
image.png

安装与配置mysql模块

mysql 模块是托管于npm上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。
想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:

  1. npm install mysql
  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. //检测mysql 模块能否正常工作
  11. db.query('select 1',(results,err)=>{
  12. if (err) return console.log(err.message)
  13. console.log(results)
  14. })

使用mysql模块操作MySQL数据库

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const sqlStr='select * from users'
  11. db.query(sqlStr,(err,results)=>{
  12. //传输失败
  13. if (err)return console.log(err.message)
  14. //传输成功
  15. //注意:如果执行的是 insert into插入语句,则results是一个对象
  16. //可以通过 affectedRows 属性,来判断是否插入数据成功
  17. if (results.affectedRows===1){
  18. console.log('插入数据成功')
  19. }
  20. })

插入数据

向users表中新增数据,其中username为Spider-Man,password 为pcc321,示例代码如下:

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const user ={username:'admin',password:'admin'}
  11. const sqlStr='insert into users (username,password)values(?,?)'
  12. db.query(sqlStr,[user.username,user.password],(err,results)=>{
  13. //传输失败
  14. if (err)return console.log(err.message)
  15. //传输成功
  16. //注意:如果执行的是 insert into插入语句,则results是一个对象
  17. //可以通过 affectedRows 属性,来判断是否插入数据成功
  18. if (results.affectedRows===1){
  19. console.log('插入数据成功')
  20. }
  21. })

插入数据的便捷方式

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

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const user ={username:'admin',password:'admin'}
  11. const sqlStr='insert into users SET ?'
  12. db.query(sqlStr,user,(err,results)=>{
  13. //传输失败
  14. if (err)return console.log(err.message)
  15. //传输成功
  16. //注意:如果执行的是 insert into插入语句,则results是一个对象
  17. //可以通过 affectedRows 属性,来判断是否插入数据成功
  18. if (results.affectedRows===1){
  19. console.log('插入数据成功')
  20. }
  21. })

更新数据

可以通过如下方式,更新表中的数据:
image.png

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const user ={id:6,username:'admin',password:'admin'}
  11. const sqlStr='update users set username=?,password=? where id=?'
  12. db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{
  13. //传输失败
  14. if (err)return console.log(err.message)
  15. //传输成功
  16. //注意:如果执行的是 insert into插入语句,则results是一个对象
  17. //可以通过 affectedRows 属性,来判断是否插入数据成功
  18. if (results.affectedRows===1){
  19. console.log('更新数据成功')
  20. }
  21. })

更新数据的便携方式

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const user ={id:6,username:'admin',password:'admin'}
  11. const sqlStr='update users set ? where id=?'
  12. db.query(sqlStr,[user,user.id],(err,results)=>{
  13. //传输失败
  14. if (err)return console.log(err.message)
  15. //传输成功
  16. //注意:如果执行的是 insert into插入语句,则results是一个对象
  17. //可以通过 affectedRows 属性,来判断是否插入数据成功
  18. if (results.affectedRows===1){
  19. console.log('更新数据成功')
  20. }
  21. })

删除数据

在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据。示例如下:
image.png

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const sqlStr='delete from users where id=?'
  11. db.query(sqlStr,5,(err,results)=>{
  12. //传输失败
  13. if (err)return console.log(err.message)
  14. //传输成功
  15. //注意:如果执行的是 insert into插入语句,则results是一个对象
  16. //可以通过 affectedRows 属性,来判断是否插入数据成功
  17. if (results.affectedRows===1){
  18. console.log('删除数据成功')
  19. }
  20. })

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

  1. //1.导入mysql模块
  2. const mysql =require('mysql')
  3. //2.建立与MySQL数据库的连接关系
  4. const db= mysql.createPool({
  5. host:'127.0.0.1',//数据库的Ip地址
  6. user: 'root',//登录数据库的账号
  7. password:'root',//登录数据库的密码
  8. database:'test'//指定要操作哪个数据库
  9. })
  10. const sqlStr='update fusers set status=? id=?'
  11. db.query(sqlStr,[1,5],(err,results)=>{
  12. //传输失败
  13. if (err)return console.log(err.message)
  14. //传输成功
  15. //注意:如果执行的是 insert into插入语句,则results是一个对象
  16. //可以通过 affectedRows 属性,来判断是否插入数据成功
  17. if (results.affectedRows===1){
  18. console.log('删除数据成功')
  19. }
  20. })