MySQL中表的增删改查(CRUD)
一.在表中增加数据(Create)
INSERT [INTO] TB_NAME [(COLUMN1,COLUMN2,...)] VALUES (value_list1),(value_list2),...;
- into可以省略
- 可仅选择部分列选择插入,column即选择的列, 如图例可以选择仅在valuelist中插入age和id如果不指定列则默认为全列插入=
- 一次可以插入多行,用逗号隔开,如图例中values后两个括号即插入两行数据
- 插入的数据必须与指定列数一一对应
二.数据库中查询数据(Retrieve)
SELECT 列1, 列2, ...
FROM tb_name
[WHERE 条件]
[ORDER BY 排序列]
[LIMIT 数量];
-
可以用select * 查询所有数据但数据过多时可能造成性能问题
-
查询特定列时select 列1,列2即可如图仅查询了id与age
-
可以结合where,语法为where +条件 进行条件筛选(where类比编程语言中的if语句)
-
可以用order by排序,具体语法为 order by+列名(即以此列数据排序)+(desc或asc也可以省略,省略默认为asc)
其中desc为降序(从大到小)asc为升序(从小到大) -
可以结合limit进行分页查询,并可以运用offset,注意:“必须”配合 ORDER BY:未指定排序时,查询结果的顺序可能不稳定,影响分页准确性。
不配合不报错,但是同一查询在不同时间执行,可能因数据变化或优化器调整返回不同顺序的结果
-- 记录的起始下标为0,limit n为筛选从0下标开始的n条数据
SELECT * FROM users LIMIT n;
-- 筛选从s下标开始的n条数据
SELECT * FROM users LIMIT s,n;
-- 结合offset分页:筛选从s下标开始的n条数据,该写法比第二种写法明确更加推荐使用该写法
SELECT * FROM users LIMIT n OFFSET s;
- 去重操作distinct,消除重复行,返回唯一不同的值,适用于需要排除重复数据的场景,并且可以针对一列或多列组合去重,注意DISTINCT 将 NULL 视为一个唯一值
-- 单列去重
SELECT DISTINCT 列名 FROM 表名;-- 多列去重(组合唯一)
SELECT DISTINCT 列1, 列2 FROM 表名;
- 可以查询有关列的表达式,并且表达式可以用as关键字写为别名
三.表中已有数据的修改(Update)
UPDATE table_name
SET column1 = value1, column2 = value2, ...
[WHERE condition]
[ORDER BY ...] -- 某些数据库支持(如 MySQL)
[LIMIT ...]; -- 某些数据库支持(如 MySQL)
可以第一对多列进行操作,并可配合一系列条件筛选否则为更改每一行
-- 同时修改用户的姓名和年龄
UPDATE users SET name = '张三',age = 28 WHERE user_id = 100;
四.表的删除
DELETE FROM table_name
[WHERE condition]
[ORDER BY ...] -- 某些数据库支持(如 MySQL)
[LIMIT ...]; -- 某些数据库支持(如 MySQL)
注意:可删除部分或全部数据(通过条件来筛选)
-- 删除所有年龄大于 100 的用户
DELETE FROM users WHERE age > 100;-- 删除前 10 条订单记录(MySQL 支持 LIMIT)
DELETE FROM orders ORDER BY order_date LIMIT 10;
五.条件查询的补充
注意:
- = 对null不安全,null=null的结果是null
特别地<=>也是等于,并且对null安全,NULL <=> NULL 结果可得 1 (TRUE) - 对于逻辑运算符的优先级记忆要求不高,可以依靠添加括号达成想法
- 模糊查询用到关键字like
模糊查询中
张% 即为张开头的所有数据,%匹配任意长度字符
_ 则仅匹配一个字符 张 _ 仅能表示张开头,长度为2的字符
ESCAPE,当你要搜索的内容本身包含 % 或 _ 时,必须用它来“取消”通配符的特殊含义
-- 错误写法:会匹配到 100abc、100xyz 等
SELECT * FROM products
WHERE title LIKE '100%';-- 正确写法:精确匹配 100%
SELECT * FROM products
WHERE title LIKE '100!%%' ESCAPE '!';
- BETWEEN … AND …和IN (…)注意
BETWEEN … AND …的左右都是闭区间
并且对非数字类型的支持
不仅限于数字,还可用于日期、字符串范围筛选,语法简洁性优势更明显
-- 查询价格在 100~500 之间的商品
SELECT * FROM products WHERE price BETWEEN 100 AND 500;
-- 等效于
WHERE price >= 100 AND price <= 500;-- 查询北京、上海、广州的用户
SELECT * FROM users WHERE city IN ('北京', '上海', '广州');-- 等效于
WHERE city = '北京' OR city = '上海' OR city = '广州';