1.在项目中操作数据库的步骤
新建表 users
1 2 3 4 5 6 7
| CREATE TABLE `users` ( `id` int NOT NULL, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `state` tinyint(1) DEFAULT NULL COMMENT '0:正常,1:禁用', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
- 安装操作 MySQL 数据库的第三方模块(mysql)
- 通过 mysql 模块连接到 MySQL 数据库
- 通过 mysql 模块执行 SQL 语句
mysql 模块是托管于 npm 上的第三方模块。它提供了在 Node.js 项目中连接和操作 MySQL 数据库的能力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const mysql = require('mysql');
const db = mysql.createPool({ host: '127.0.0.1', user: 'root', password: 'admin123', database: 'my_db_01', });
db.query('select 1', (err, results) => { if(err) return console.log(err.message) console.log(results) });
|
2.使用 mysql 模块操作 MySQL 数据库
1.查询数据
1 2 3 4 5 6 7 8 9
| const sqlStr = 'select * from users' db.query(sqlStr, (err, results) => { if (err) return console.log(err.message) console.log(results) })
|
2.插入数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const user = { username: 'Spider-Man', password: 'pcc123' };
const sqlStr = 'insert into users (username, password) values (?, ?)';
db.query(sqlStr, [user.username, user.password], (err, results) => { if (err) return console.log(err.message) if (results.affectedRows === 1) { console.log('插入数据成功!') } });
|
向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速插入数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
const user = { username: 'Spider-Man2', password: 'pcc4321' };
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('插入数据成功') } });
|
3.更新数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
const user = { id: 6, username: 'aaa', password: '000' };
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) if (results.affectedRows === 1) { console.log('更新成功'); } });
|
更新表数据时,如果数据对象的每个属性和数据表的字段一一对应,则可以通过如下方式快速更新表数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
const user = { id: 6, username: 'aaaa', password: '0000' };
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('更新数据成功'); } });
|
4.删除数据
1 2 3 4 5 6 7 8 9 10 11
|
const sqlStr = 'delete from users where id=?';
db.query(sqlStr, 5, (err, results) => { if (err) return console.log(err.message) if (results.affectedRows === 1) { console.log('删除数据成功'); } });
|
使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于 status 这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的 status 字段标记为删除即可。
1 2 3 4 5 6 7 8 9
| const sqlStr = 'update users set status=? where id=?';
db.query(sqlStr, [1, 6], (err, results) => { if (err) return console.log(err.message) if (results.affectedRows === 1) { console.log('标记删除成功'); } });
|