在项目中操作数据库的步骤
①安装操作MySQL数据库的第三方模块(mysql)
②通过mysql模块连接到MySQL数据库
③通过mysql模块执行SQL 语句
安装与配置mysql模块
mysql 模块是托管于npm上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。
想要在项目中使用它,需要先运行如下命令,将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:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})//检测mysql 模块能否正常工作db.query('select 1',(results,err)=>{if (err) return console.log(err.message)console.log(results)})
使用mysql模块操作MySQL数据库
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const sqlStr='select * from users'db.query(sqlStr,(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('插入数据成功')}})
插入数据
向users表中新增数据,其中username为Spider-Man,password 为pcc321,示例代码如下:
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const user ={username:'admin',password:'admin'}const sqlStr='insert into users (username,password)values(?,?)'db.query(sqlStr,[user.username,user.password],(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('插入数据成功')}})
插入数据的便捷方式
向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速插入数据:
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const user ={username:'admin',password:'admin'}const sqlStr='insert into users SET ?'db.query(sqlStr,user,(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('插入数据成功')}})
更新数据
可以通过如下方式,更新表中的数据:
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const user ={id:6,username:'admin',password:'admin'}const sqlStr='update users set username=?,password=? where id=?'db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('更新数据成功')}})
更新数据的便携方式
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const user ={id:6,username:'admin',password:'admin'}const sqlStr='update users set ? where id=?'db.query(sqlStr,[user,user.id],(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('更新数据成功')}})
删除数据
在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据。示例如下:
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const sqlStr='delete from users where id=?'db.query(sqlStr,5,(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('删除数据成功')}})
使用DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE 语句把数据删除掉,而是执行了UPDATE 语句,将这条数据对应的status字段标记为删除即可。
//1.导入mysql模块const mysql =require('mysql')//2.建立与MySQL数据库的连接关系const db= mysql.createPool({host:'127.0.0.1',//数据库的Ip地址user: 'root',//登录数据库的账号password:'root',//登录数据库的密码database:'test'//指定要操作哪个数据库})const sqlStr='update fusers set status=? id=?'db.query(sqlStr,[1,5],(err,results)=>{//传输失败if (err)return console.log(err.message)//传输成功//注意:如果执行的是 insert into插入语句,则results是一个对象//可以通过 affectedRows 属性,来判断是否插入数据成功if (results.affectedRows===1){console.log('删除数据成功')}})
