- A+
- 常用的数据库代码
-- 通过 * 把 users 表中所有的数据查询出来 -- select * from users -- 从 users 表中把 username 和 password 对应的数据查询出来 -- select username, password from users -- 向 users 表中,插入新数据,username 的值为 tony stark password 的值为 098123 -- insert into users (username, password) values ('tony stark', '098123') -- select * from users -- 将 id 为 4 的用户密码,更新成 888888 -- update users set password='888888' where id=4 -- select * from users -- 更新 id 为 2 的用户,把用户密码更新为 admin123 同时,把用户的状态更新为 1 -- update users set password='admin123', status=1 where id=2 -- select * from users -- 删除 users 表中, id 为 4 的用户 -- delete from users where id=4 -- select * from users -- 演示 where 子句的使用 -- select * from users where status=1 -- select * from users where id>=2 -- select * from users where username<>'ls' -- select * from users where username!='ls' -- 使用 AND 来显示所有状态为0且id小于3的用户 -- select * from users where status=0 and id<3 -- 使用 or 来显示所有状态为1 或 username 为 zs 的用户 -- select * from users where status=1 or username='zs' -- 对users表中的数据,按照 status 字段进行升序排序 -- select * from users order by status -- 按照 id 对结果进行降序的排序 desc 表示降序排序 asc 表示升序排序(默认情况下,就是升序排序的) -- select * from users order by id desc -- 对 users 表中的数据,先按照 status 进行降序排序,再按照 username 字母的顺序,进行升序的排序 -- select * from users order by status desc, username asc -- 使用 count(*) 来统计 users 表中,状态为 0 用户的总数量 -- select count(*) from users where status=0 -- 使用 AS 关键字给列起别名 -- select count(*) as total from users where status=0 -- select username as uname, password as upwd from users
实际开发中库、表、行、字段的关系
- 在实际项目开发中,一般情况下,每个项目都对应独立的数据库。
- 不同的数据,要存储到数据库的不同表中,例如:用户数据存储到 users 表中,图书数据存储到 books 表中。
- 每个表中具体存储哪些信息,由字段来决定,例如:我们可以为 users 表设计 id、username、password 这 3 个
字段。 - 表中的行,代表每一条具体的数据。
字段的特殊标识
- PK(Primary Key)主键、唯一标识
- NN(Not Null)值不允许为空
- UQ(Unique)值唯一
- AI(Auto Increment)值自动增长
在项目中使用Mysql数据库
在项目中操作数据库的步骤
- 安装操作 MySQL 数据库的第三方模块(mysql)
- 通过 mysql 模块连接到 MySQL 数据库
- 通过 mysql 模块执行 SQL 语句
安装mysql模块
mysql 模块是托管于 npm 上的第三方模块。它提供了在 Node.js 项目中连接和操作 MySQL 数据库的能力。想要在项目中使用它,需要先运行如下命令,将 mysql 安装为项目的依赖包:
npm install mysql
配置
mysql模块
在使用 mysql 模块操作 MySQL 数据库之前,必须先对 mysql 模块进行必要的配置,主要的配置步骤如下:
测试mysql模块是否可以正常工作
调用 db.query() 函数,指定要执行的 SQL 语句,通过回调函数拿到执行的结果:
const mysql = require('mysql') const db = mysql.createPool({ host: '127.0.0.1', user: 'root', password: 'root', database: 'bookman', }) //检查mysql模块是否正常使用 db.query('SELECT 1', (err, results) => { if (err) return console.log(err.message); //只要可以输出[ RowDataPacket { '1': 1 } ]的结果,就证明数据库链接没问题。 console.log(results); })
查询语句
查询表中数据示例:
const mysql = require('mysql') const db = mysql.createPool({ host: '127.0.0.1', user: 'root', password: 'root', database: 'bookman', }) db.query('SELECT * FROM tb_book', (err, results) => { //查询失败 if (err) return console.log(err.message); //查询成功 //如果执行的是select查询语句,则返回的是数组 console.log(results); })
插入数据
向表中插入数据,示例代码如下。
- 便捷方式
//插入数据 简化形式 const user = { username: 'liyu2', password: '49023dfs!2' } //待执行的sql语句 const sqlStr = 'INSERT INTO tb_user SET ?' //使用数组的形式,依次为?占位符指定具体的值。 db.query(sqlStr, user, (err, results) => { //失败了 if (err) return console.log(err.message); //成功了 if (results.affectedRows) { console.log('插入数据成功'); } })
注意:
这种方法适合插入多项属性时使用
db.query里的第二个值一定是对象,如果是多个值,就用中括号包含
如果执行的是insert into语句,则result是一个对象
可以通过affectedRows属性,来判断是否插入成功
- 初始形式
//插入数据 const list = { username: 'liyu3', password: '23123' } //待执行的sql语句 const sqlstr = 'INSERT INTO tb_user SET ?' //使用数组的形式,依次为?占位符指定具体的值。 db.query(sqlstr, [list.username, list.password], (err, results) => { //失败了 if (err) return console.log(err.message); //成功了 //注意:如果执行的是insert into语句,则result是一个对象 //可以通过affectedRows属性,来判断是否插入成功 if (results.affectedRows) { console.log('插入数据成功'); } })
更新数据
可以通过如下方式,更新表中的数据:
//需要更新的数据 const update = { username: 'liyu', password: '3343' } //要执行的SQL语句 const updateSql = 'UPDATE tb_user SET password=? WHERE username = ?' //3.调用db.query()执行 SQL 语句的同时,依次为占位符指定具体的值 db.query(updateSql, [update.password, update.username], (err, results) => { if (err) return console.log(err.message); if (results.affectedRows) { console.log('更新状态成功'); } })
注意:
执行了update后,返回的也是一个对象,可以通过.affectedRows来判断是否成功
- 便捷方式
const update2 = { username: 'liyu2', password: '111' } const updateSql1 = 'UPDATE tb_user SET ? WHERE username=?' db.query(updateSql1, [update2, update2.username], (err, results) => { if (err) return console.log(err.message); if (results.affectedRows) { console.log('更新成功'); } })
注意:
在是使用便捷方式开发代码时需要注意,db.query里的第二参数里,第一个值一定是对象。
删除数据
在删除数据时,推荐根据 id 这样的唯一标识,来删除对应的数据。示例如下:
const sqlStr = 'delete from tb_user where username = ?' db.query(sqlStr, 'liyu2', (err, results) => { if (err) return console.log(err.message); if (results.affectedRows) { console.log('删除成功'); } })
注意:
调用db.query()执行SQL语句时,为占位符指定具体的值
如果SQL里有多个占位符,则必须使用数组为每个占位符指定具体的值
如果SQL里只有一个占位符,则可以省略数组
标记删除
使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除
的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于 status
这样的状态字段
,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应
的 status 字段标记为删除即可。