本文为笔者学习Node笔记,待完善,欢迎一起交流学习。
目录
一、SQL的SELECT语句
1.语法
SELECT语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集)。语法格式如下:
-- 这是注释
-- 从FROM指定的【表中】,查询出【所有的】数据。*表示【所有列】
SELECT * FROM 表名称
-- 从FROM指定的【表中】,查询出指定 列名称(字段)的数据。
SELECT 列名称 FROM 表名称
注意:SQL语句中的关键字对大小写不敏感。SELECT 等效于select ,FROM 等效于from
2.示例:
-- 代表查询users表中所有信息
select * from users
-- 代表查询users表中 username 和 password 字段
select username,password from users
二、SQL的INSERT INTO语句
1.语法
INSERT INFO语句用于向数据表中插入新的数据行。语法格式如下:
-- 语法解读:向指定的表中,插入如下几列数据,列的值通过values一一指定
-- 注意:列和值要一一对应,多个列和多个值之间,使用英文逗号分割
INSERT INTO table_name(列1,列2,...) VALUES (值1,值2,...)
2.示例
-- 向users表中,插入一条username为tom,password为123123的用户数据
INSERT INTO users(username,password) VALUES ('tom','123123')
三、SQL的UPDATE语句
1.语法
UPDATE语句用于修改表中的数据。语法格式如下:
-- 语法解读:
-- 1.用 UPDATE 指定要更新哪个表中的数据
-- 2.用 SET指定列对应的新值
-- 3.用 WHERE 指定更新的条件
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
2.示例
-- 向users表中,修改id为2的用户密码,更新为888888
UPDATE users SET password = '888888' WHERE id = 2
-- 向users表中,修改id为2的用户密码为666666和用户状态为1
UPDATE users SET password = '666666' , status = 1 WHERE id = 2
四、SQL的DELETE语句
1.语法
DELETE语句用于删除表中的行。语法格式如下:
-- 语法解读:
-- 从指定的表中,根据 WHERE 条件,删除对应的数据行
DELETE FROM 表名称 WHERE 列名称 = 值
2.示例
-- 从users表中,删除id为3的用户
DELETE FROM users WHERE id = 3
五、SQL的WHERE子句
1.语法
WHERE语句用于限定选择的标准,在SELECT、UPDATE、DELETE语句中,皆可使用WHERE子句来限定选择的标准。
-- 查询语句中的WHERE条件
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
-- 更新语句中的WHERE条件
UPDATE 表名称 SET 列 = 新值 WHERE 列 运算符 值
-- 删除语句中的WHERE条件
DELETE FROM 表名称 WHERE 列名称 运算符 值
2.运算符
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
注意:在某些版本的SQL中,操作符<>可以写成 !=
六、SQL的AND和OR运算符
1.语法
- AND和OR可在WHERE子语句中把两个或多个条件结合起来。
- AND表示必须同时满足多个条件,相当于JavaScript中的
&&
运算符 - OR表示只要满足任意一个条件即可,相当于JavaScript中的
||
运算符
2.示例
-- 使用AND来显示所有status为0并且id小于3的用户
SELECT * FROM users WHERE status = 0 AND id < 3
-- 使用OR来显示所有status为1或者username为zs的用户
SELECT * FROM users WHERE status = 1 OR username = 'zs'
七、SQL的ORDER BY子句
1.语法
- ORDER BY语句用于根据指定的列对结果集进行排序。
- ORDER BY语句默认按照升序对记录进行排序。
- 如果希望按照降序对记录进行排序,可以使用
DESC
关键字。
2.示例
升序
-- 对users表中的数据,按照status字段进行升序排序
SELECT * FROM users ORDER BY status
SELECT * FROM users ORDER BY status ASC
降序
-- 对users表中的数据,按照id字段进行降序排序
SELECT * FROM users ORDER BY id DESC
多重排序
-- 对users表中的数据,先按照status字段进行降序排序,再按照username的字母顺序进行升序排序
SELECT * FROM users ORDER BY status DESC , username ASC
八、SQL的COUNT(*)函数
1.语法
COUNT(*)函数用于返回查询结果的总数据条数,语法格式如下:
SELECT COUNT(*) FROM 表名称
2.示例
-- 查询users表中status为0的总数据条数
SELECT COUNT(*) FROM users WHERE status = 0
3.使用AS为列设置别名
如果希望给查询出来的列名称设置别名,可以使用AS关键字,示例如下:
-- 将列名从COUNT(*)改为total
SELECT COUNT(*) AS total FROM users WHERE status = 0
九、在项目中操作MySQL
1.步骤
- 安装操作MySQL数据库的第三方模块(mysql)
- 通过mysql模块连接到MySQL数据库
- 通过mysql模块执行SQL语句
2.安装与配置mysql模块
(1)安装mysql模块
mysql模块是托管与npm上的第三方模块。它提供了在Node.js项目中链接和操作MySQL数据库的能力。
安装命令:
npm install mysql
(2)配置mysql模块
//导入模块
const mysql = require('mysql')
//建立与 MySQL 数据库的连接
const db = mysql.createPool({
host: '127.0.0.1', // 数据库的IP地址
user: 'root', //登录数据库的账号
password: 'admin123', // 登录数据库的密码
database: 'my_db_01' // 指定操作哪个数据库
})
(3)测试mysql模块能否正常工作
调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果
//检测mysql模块能否正常工作,select 1没有任何实质性作用,只是为了测试能否正常工作
db.query('select 1', (err, results) => {
//mysql模块报错
if (err) return console.log(err.message);
//成功执行的SQL语句
console.log(results);
})
3.使用mysql模块操作MySQL数据库
(1)查询数据
//查询users表中所有的数据
const sqlStr = 'select * from users'
db.query(sqlStr, (err, results) => {
if (err) return console.log(err.message);
//如果执行的是select查询语句,则执行的结果是数组
console.log(results);
})
(2)插入数据
//要插入到users表中的数据对象
const user = {
username: 'Jack', password: 'Jack001' }
//待执行的SQL语句,其中英文的 ? 表示占位符
const sqlStr = 'insert into users set ?'
//使用数组的形式,依次为?占位符指定具体的值
//如果执行的是insert into 插入语句 则results 是一个对象,可以通过affectedRows判断插入数据是否成功
db.query(sqlStr,user, (err, results) => {
if (err) return console.log(err.message);
if (results.affectedRows === 1) {
console.log('插入数据成功'); }
})
(3)更新数据
//要更新的数据对象
const user = {
id: 15, username: '小红', password: '000' }
//定义SQL语句
const sqlStr = 'update users set ? where id = ?'
//执行SQL语句
db.query(sqlStr, [user, user.id], (err, results) => {
//如果执行的是update语句 则results 是一个对象,可以通过affectedRows判断插入数据是否成功
if (err) return console.log(err.message);
if (results.affectedRows === 1) {
console.log('更新数据成功'); }
})
(4)删除数据
//删除id为12的用户
const sqlStr = 'delete from users where id = ?'
db.query(sqlStr, 12, (err, results) => {
//如果执行的是delete语句 则results 是一个对象,可以通过affectedRows判断插入数据是否成功
if (err) return console.log(err.message);
if (results.affectedRows === 1) {
console.log('删除数据成功'); }
})
标记删除:
使用DELETE语句,会真正的把数据从表中删除。为了保险起见,推荐使用标记删除
的形式,模拟删除的动作。
所谓标记删除,就是在表中设置类似于status
这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status
字段标记为删除即可。
//标记删除
const sqlStr = 'update users set status = ? where id = ?'
db.query(sqlStr, [1,11], (err, results) => {
if (err) return console.log(err.message);
if (results.affectedRows === 1) {
console.log('标记删除数据成功'); }
})
注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值;如果SQL语句中只有一个占位符,则可以省略数组