DML【数据操作语言】
半塘 2023/8/29 数据库MySQL
DQL是对数据的查操作,DML就是操作:增、删、改。数据库的基础操作就是:增删改查(CRUD)。
# 1、插入(增)
语法
# 语法1
insert into 表名(字段名1, ...) values(值1, ...);
# 语法2
insert into 表名(字段名1, ...) 子查询;
# 语法3
insert into 表名 set 列名=值, 列名=值, ...
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
注意点
- 字段个数和值的个数必须一致
- 字段类型和值类型一致或兼容,而且一一对应
- 可以为空的字段,可以不用插入值,或用null填充
- 不可以为空的字段,必须插入值
- 字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致
例子练习
#方式一:经典的插入
#1.插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
VALUES (13, '唐艺昕', '女', '1990-4-23', '1898888888', NULL, 2);
#2.不可以为null的列必须插入值。可以为null的列如何插入值?
#方式一:显式
INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
VALUES (14, '马丽', '女', '1980-5-23', '1898888888', NULL, 2);
#方式二:隐式
INSERT INTO beauty(id, NAME, sex, phone)
VALUES (15, '娜扎', '女', '1388888888');
#3.列的顺序可以调换,但要与值对应
INSERT INTO beauty(NAME, sex, id, phone)
VALUES ('蒋欣', '女', 16, '110');
#4.列数和值的个数必须一致
INSERT INTO beauty(NAME, sex, id, phone, borndate) #错误❌ 不匹配
VALUES ('关晓彤', '女', 17, '110');
#5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
INSERT INTO beauty
VALUES (18, '梁缘', '男', NULL, '119', NULL, NULL);
#方式二:
INSERT INTO beauty
SET id=19, NAME='刘涛', phone='999';
#两种方式大pk ★
#1、方式一支持插入多行,方式二不支持
INSERT INTO beauty
VALUES (23, '唐艺昕1', '女', '1990-4-23', '1898888888', NULL, 2)
, (24, '唐艺昕2', '女', '1990-4-23', '1898888888', NULL, 2)
, (25, '唐艺昕3', '女', '1990-4-23', '1898888888', NULL, 2);
#2、方式一支持子查询,方式二不支持
INSERT INTO beauty(id, NAME, phone)
SELECT 26, '宋茜', '11809866';
INSERT INTO beauty(id, NAME, phone)
SELECT id, boyname, '1234567'
FROM boys
WHERE id < 3;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 2、删除(删)
语法
# 单表的删除
delete from 表名 where 筛选条件;
# sql99语法
delete 别名1, 别名2 from 表1 别名1 inner|left|right join 表2 别名2 on 连接条件
where 筛选条件 limit 条目数
# truncate 清空全表(慎用),包括自增序列也清除
truncate table 表名;
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
注意点
- delete可以加where条件,truncate不能加where
- truncate删除,效率高一丢丢
- 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始
- truncate删除没有返回值,delete删除返回删除的行数
- truncate删除不能回滚,delete删除可以回滚
例子练习
#方式一:delete
#1.单表的删除
#案例:删除手机号以9结尾的女神信息
DELETE
FROM beauty
WHERE phone LIKE '%9';
#2.多表的删除
#案例:删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName` = '张无忌';
#案例:删除黄晓明的信息以及他女朋友的信息
DELETE b, bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName` = '黄晓明';
#方式二:truncate语句
#案例:将魅力值>100的男神信息删除
TRUNCATE TABLE boys WHERE userCP >100; #❌
#delete pk truncate【面试题★】
#区别
DELETE FROM boys;
TRUNCATE TABLE boys;
INSERT INTO boys (boyname, usercp)
VALUES ('张飞', 100),
('刘备', 100),
('关云长', 100);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 2、修改(改)
语法
update 表名 set 列=新值, 列=新值, ... where 筛选条件;
# sql99语法
update 表1 别名 inner|left|right join 表2 别名 on 连接条件
set 列=值, ...
where 筛选条件;
1
2
3
4
5
6
2
3
4
5
6
例子练习
#1.修改单表的记录
#案例1:修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty
SET phone = '13899888899'
WHERE NAME LIKE '唐%';
#案例2:修改boys表中id为2的名称为张飞,魅力值 10
UPDATE boys
SET boyname='张飞', usercp=10
WHERE id = 2;
#2.修改多表的记录
#案例 1:修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN beauty b ON bo.`id` = b.`boyfriend_id`
SET b.`phone`='114',
bo.`userCP`=1000
WHERE bo.`boyName` = '张无忌';
#案例2:修改没有男朋友的女神的男朋友编号都为2号
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id` = b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27