mysql基础_表数据增删改(DML)
数据操作语言:
插入:insert
修改:update
删除:delete
一、插入语句
1. 语法
# 方式一
insert into 表名(列名,...) # 可插入多行
values(值1,...),
values(值1,...);
# 方式二
insert into 表名 set 列名=值,列名=值,...
对比:
- 方式一支持插入多行,方式二不支持
- 方式一支持子查询,方式二不支持
# 支持子查询
INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234567'
FROM boys WHERE id<3;
2. 注意
- 插入的值的类型要与列的类型一致或兼容
- 列数和值的个数必须一致
- 不可以为null的列必须插入值
- 可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
二、修改
1. 修改单表数据
1.1 语法
update 表名
set 列=新值,列=新值,...
where 筛选条件;
1.2 案例
# 修改boys表中id好为2的名称为张三,魅力值 10
UPDATE boys
SET boyname='张三',usercp=10
WHERE id=2;
2. 修改多表记录 级联修改
2.1 语法
# sql92语法:
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;
# sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;
2.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. 单表删除
1.1 语法
delete from 表名 where 筛选条件
2. 单表删除 级联删除
2.1 语法
# sql92语法:
delete 表1的别名,表2的别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;
# sql99语法:
delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
2.2 案例
#案例:删除张无忌的女朋友的信息
DELETE b # 只有一个 b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';
#案例:删除黄晓明的信息以及他女朋友的信息
DELETE b,bo # 有 b 和 bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黄晓明';
3. TRUNCATE 删除全部数据
语法
truncate table 表名;
4. DELETE 和 TRUNCATE 对比 (面试)
- delete 可以加where 条件,truncate不能加
- truncate删除,效率高一丢丢
- 假如要删除的表中有自增长列,
- 如果用delete删除后,再插入数据,自增长列的值从断点开始,
- 而truncate删除后,再插入数据,自增长列的值从1开始。
- truncate删除没有返回值,delete删除有返回值
- struncate删除不能回滚,delete删除可以回滚.