MySQL | MySQL表的增删改查(CRUD)
目录
- 前言:什么是 CRUD ?
- 一、Creat 新增
- 1.1 语法
- 1.2 示例
- 1.2.1 单行数据全列插入
- 1.2.2 单行数据指定列插入
- 1.2.3 多行数据指定列插入
- 二、Retrieve 检索
- 2.1 语法
- 2.2 示例
- 2.2.1 全列查询
- 2.2.2 指定列查询
- 2.2.3 查询字段为表达式
- 2.2.4 结果去重查询
- 2.2.5 where条件查询
- 2.2.6 order by排序
- 2.2.7 分页查询
- 三、Update 修改
- 四、Delete 删除
复习: MySQL | MySQL库、表的基本操作
前言:什么是 CRUD ?
CRUD 其实就是对数据库中的记录进行增删改查的操作,每个字母都是 “增删改查” 的首字母:
- C : Creat(创建)
- R : Retrieve (读取)
- U : Update (更新)
- D : Delete (删除)
注: 增删改查操作的是表中的数据行!
一、Creat 新增
1.1 语法
INSERT [INTO] 表名
[(列名 [,列名]...)]
VALUES
(value_list))[, (value_list)]...
//值列表
value_list: value, [, value]...
简单来说就是:
insert into 表名 [列名...] values (值...);
1.2 示例
首先创建一张表,见下图:
1.2.1 单行数据全列插入
插入成功!
所插入的值的数量必须和定义表的列的数量和顺序一致!
1.2.2 单行数据指定列插入
这里指定在 id 列和 name 列插入 “2 ,李四”
1.2.3 多行数据指定列插入
这里指定在 id 列和 name 列插入 “3 ,王五” ,“4 ,赵六”
二、Retrieve 检索
2.1 语法
SELECT
[DISTINCT] -- 去重
select_expr [, select_expr] ...
[FROM table_references] -- 从哪个表
[WHERE where_condition] -- 查询条件
[GROUP BY {col_name | expr}, ...] -- 根据什么分组
[HAVING where_condition] -- 对分组的结果进⾏过滤
[ORDER BY {col_name | expr } [ASC | DESC], ... ] -- 排序
[LIMIT {[offset,] row_count | row_count OFFSET offset}] -- 限制
在exam表中插入以下数据:
-- 插入测试数据
INSERT INTO exam (id, name, chinese, math, english) VALUES
(1, '唐三藏', 67, 98, 56),
(2, '孙悟空', 87, 78, 77),
(3, '猪悟能', 88, 98, 90),
(4, '曹孟德', 82, 84, 67),
(5, '刘⽞德', 55, 85, 45),
(6, '孙权', 70, 73, 78),
(7, '宋公明', 75, 65, 30);
2.2 示例
2.2.1 全列查询
select * from 表名;
// *表示所有列 返回表中所有信息
注意: 在工作中,select * from 表名;
是个非常危险的操作,为在生产环境中,一个表中的数据量非常大,有可能是TB级,每一个查询执行的时候会有磁盘开销和网络开销,如果不加限制会把服务器的资源吃完!!!
2.2.2 指定列查询
select 列名、列名... from 表名;
要查询的列只要在表中即可,与顺序无关。
2.2.3 查询字段为表达式
例子:
select id, name, chinese, 10 from exam; -- 可以是一个常量
select id, name, chinese, 10 + 1 from exam; -- 可以是一个表达式
select id, name, chinese + math + english from exam; -- 可以是一个表达式
select id, name, chinese + math + english (as) total from exam;-- 可以为列重命名,直接在列明后边写,可以加as也可以不加
以上四个代码示例的执行结果如下:
2.2.4 结果去重查询
select math from exam;
select distinct math from exam; -- 加distinct关键字对查询结果去重
结果1中的两个98变成了一个98
2.2.5 where条件查询
用法:直接在 where 后边加查询条件
示例:
select id, name, math from exam;
select id, name, math from exam where math > 90; -- 查询数学成绩大于90分的同学
查询结果:
2.2.6 order by排序
示例:
将数学成绩大于80分的同学按 升序(asc) / 降序(desc) 排序;
select id, name, math from exam where math > 80 order by math asc;-- 升序
select id, name, math from exam where math > 80 order by math desc;-- 降序
查询结果:
注意:
• 查询中没有ORDER BY 子句,返回的顺序是未定义的,永远不要依赖这个顺序
• ORDER BY 子句中可以使用列的别名进行排序
• NULL 进行排序时,视为比任何值都小,升序出现在最上面,降序出现在最下面
2.2.7 分页查询
-- 起始下标为 0
-- 从 0 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num;
-- 从 start 开始,筛选 num 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT start, num;
-- 从 start 开始,筛选 num 条结果,⽐第⼆种⽤法更明确,建议使⽤
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT num OFFSET start;
示例:
select id, name, chinese + english + math total from exam;
select id, name, chinese + english + math total from exam limit 2;-- 从0开始往后查询两条
select id, name, chinese + english + math total from exam limit 1,2;-- 从1开始向后查询两条,不包括1
select id, name, chinese + english + math total from exam limit 2 offset 1;
-- 从记录为1的位置开始向后读取两条记录,不包括1
查询结果:
三、Update 修改
语法:
UPDATE table_reference -- 表名
SET assignment [, assignment] ... --哪个列,什么值
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
简单来说就是:
update 表名 set 列名 = 值...;
示例:将孙悟空的数学成绩修改为80分
代码:
update exam set math = 80 where name = '孙悟空';
执行结果:
update 注意事项:
- 在原值的基础上做变更时,不能使用math+=30这样的语法,要使用math = math + 30
- 不加where条件时,会导致全表数据被更新,必须谨慎操作!!!
四、Delete 删除
语法:
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
示例1:删除孙悟空同学的考试成绩
delete from exam where name = '孙悟空';
示例2:删除整张表的数据
语法:
delete from exam;
注意:
执行 delete 时不加条件会删除整张表的数据,谨慎操作