前言、DML 数据操纵语言
-
Data Management Language,主要的操作对象是表中的数据,主要做的事情就是表中数据的增删改
-
管理表中数据时主要用到的关键字
插入:insert
修改:update
删除:delete
一、插入语句(经典插入方式) insert into
-
语法:
insert into 表名(列名,......) values(值1,......);
-
特点:
① 插入的值的类型要与列的类型一致或兼容
② 可以为null的列如何插入值?
方式1
:写上列名,插入值时写null ,如案例1
方式2
:列名和值都不写 ,如案例2
③ 列的顺序可以调换,列数和值必须匹配,如案例3
④ 可以省略列名,默认所有列,而且列的顺序和表中列的顺序要一致,如案例4
案例
1 在beauty表中插入一个行的记录
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-02-23','11112222333',NULL,2);
SELECT * FROM beauty;
不可以为null的字段必须插入值,可以为null的列如何插入值?
-
方式1:写上列名,插入值时写null ,如案例1
-
方式2:列名和值都不写 ,如案例2
案例
2
INSERT INTO beauty(id,NAME,sex,borndate,phone,boyfriend_id)
VALUES(14,'周迅','女',NULL,'100100',4);
案例
3
INSERT INTO beauty(NAME,id,sex,borndate,phone,boyfriend_id)
VALUES('小小',15,'女','1996-02-19','11111111',3);
案例
4
INSERT INTO beauty VALUES(16,'王菲','女','1978-09-18','1100101010',NULL,2);
二、插入方式二(巧用set关键字)
- 语法:
insert into 表名
set 列名1=值1, 列名2=值2, .....
案例
5
INSERT INTO beauty
SET id=17,NAME='孙俪',sex='女',phone='11111111';
插入方式1和方式2的对比:
- 1.方式1支持插入多行,方式2不支持插入多行
INSERT INTO beauty(id,NAME,phone)
VALUES(18,'宋茜','1919191919'),(19,'赵李颖','198298298');
- 2.方式1支持子查询,方式2不支持
INSERT INTO beauty(id,NAME,phone)
SELECT 20,'蔡依林','78650678';
三、修改语句
1.修改单表的记录
语法:
UPDATE
表名
SET
列=值,列=值…
where
筛选条件2.修改多表的记录
语法:
update
表名
inner|left outer|right outer join
表2
on
筛选条件
set
列=值,列=值,…
where
筛选条件
案例
6:修改单表记录
UPDATE beauty
SET NAME='蔡林林',phone='0000000'
WHERE id = 20;
UPDATE beauty
SET phone='0000001',NAME='蔡林林'
WHERE id = 20;
注意:
修改多表记录,所谓多表记录,其实是将多个表连接之后再修改的意思
案例
7:修改张无忌的女友的电话号码为1114
UPDATE beauty g
INNER JOIN boys b
ON g.`boyfriend_id` = b.`id`
SET g.`phone` = 1114
WHERE b.`boyName` = '张无忌';
案例
8:修改没有男朋友的女神的男友编号为2
UPDATE beauty g
LEFT OUTER JOIN boys b
ON g.`boyfriend_id` = b.`id` #通过连接条件g.`boyfriend_id` = b.`id`
#连接两个表,beauty为主表
SET g.`boyfriend_id` = 2
WHERE b.`id` IS NULL; #where放在set之后
四、删除语句
-
方式一:
delete
(每次删除以行
为最小单位,或者直接删除整张表) -
语法:
单表的删除 语法: delete from 表名(不加where 筛选条件时删除整张表) where 筛选条件 多表的删除 语法: delete 表1的别名,表2的别名(注:如果只删除表1中的内容,就只写上表1别名) from 表1 别名 inner | left outer | right outer join 表2 别名 on 连接条件 where 筛选条件
-
方式二:
truncate
(只能用于删除整个表) -
语法:
truncate table 表名;
4.1 单表的删除
案例
9 删除手机号以9结尾的女神信息 (我给beauty加了别名,发现并不符合语法)
DELETE FROM beauty WHERE phone LIKE '%9';
4.2 多表的删除
案例
10 删除张无忌的女友的信息
DELETE g
FROM beauty g
INNER JOIN boys b
ON g.`boyfriend_id` = b.`id`
WHERE b.`boyName`= '张无忌';
案例
11 删除黄晓明及其女友的信息
DELETE g,b
FROM beauty g
INNER JOIN boys b
ON g.`boyfriend_id` = b.`id`
WHERE b.`boyName` = '黄晓明';
SELECT * FROM boys;
SELECT * FROM beauty;
案例
12:魅力值大于100的男神信息删除
注意
:如果使用truncate
,则不可以加where
筛选条件,所以上述的案例很难满足
TRUNCATE TABLE boys; --直接删除boys表
五、delete与truncate的比较【面试题】
delete
可以加where
筛选条件;truncate
不可以加,且只能删除整张表truncate
删除的效率高一点点- 如果表中有自增长列:
使用delete
删除数据后,再插入数据,自增长列从断点处开始
使用truncate
删除数据后,再插入数据,自增长列从1开始:如下案例13truncate
删除没有返回值,delete
删除有返回值truncate
删除后不能回滚,但是delete
删除后可以回滚
案例
13:
DELETE FROM boys;
SELECT * FROM boys;
INSERT INTO boys(boyName,userCP)
VALUES('张飞',100),('关羽',100),('刘备',100);
TRUNCATE TABLE boys;
SELECT * FROM boys;
INSERT INTO boys(boyName,userCP)
VALUES('张飞',100),('关羽',100),('刘备',100);