数据操作语言 (DML:Data Manipulate Language )包括:
插入:insert
修改:update
删除:delete
一、插入语句
方式一:(经典插入)
1. 语法:
insert into 表名 ( 列名,…)
values ( 值1,…) ;
# 案例 #:
在jobs表中插入job_id为TA_REP ,job_title为Clerk,min_salary为6000 ,max_salary为18000.
2. 特点:
① 插入的值的类型要与列的类型一致或兼容
② 不可以为null的列必须插入值;
可以为空的列插入值,可以将列名和值都省略;也可以写好列名,值用null填充
③ 列的顺序可以调换
④ 列数和值的个数必须一致
⑤ 列名可以省略,但默认所有列,并且列的顺序和表中列的顺序一致(如下案例)
方式二:
语法:
insert into 表名
set 列名=值,列名=值,……
# 案例 #:
在jobs表中插入job_ id为AB_MAN,job_ title为 Manager ,min_ salary为8000, max_ salary为20000.
两种方式的比较:
① 方式一支持插入多行,方式二不支持
② 方式一支持子查询,方式二不支持
二、修改语句
1. 修改单表的记录
语法:
update 表名
set 列=新值,列=新值,……
(要求值的类型和列要一致或者兼容,字符和日期型加单引号,数值型不用加,修改多列,中间用逗号隔开)
【where 筛选条件】;
# 案例 #:
修改部门表中的Adm的location_id为1600
首先, 查询departments表中的所有信息(其中Adm的location_id为1700)
其次,修改部门表中的Adm的location_id为1600
2. 修改多表的记录【补充】
语法:
sql92语法:
update 表1 别名,表2 别名2
set 列=值,……
where 连接条件
and 筛选条件;
sql99语法:
update 表1 别名
inner/left/right join 表2 别名
on 连接条件
set 列=值,……
where 筛选条件;
三、删除语句
方式一:delete语句
1. 单表的删除:
语法:
delete from 表名 【where 筛选条件】
注:
① 不加筛选条件,表中的数据全被删除;
② 加筛选条件是删除满足条件的部分行
③ 删除是删除整行;
#案例 #:
删除编号以2开头的location_id信息
特别注意:(上述案例报错原因及解决方案如下:)
问题: 删除有外键关联的数据或者表的时候,mysql出现报错
解决方法: 先关闭外键约束,执行删除操作,然后再开启外键约束
2. 多表的删除:【补充】
sql92语法:
delete 表1的别名,【表2的别名】
from 表1 别名1,表2 别名2
where 连接条件
and 筛选条件;
sql99语法:
delete 表1的别名,【表2的别名】
from 表1 别名
inner/left/right join 表2别名on连接条件(相当于两个表连接出一个新的结果集,数据源)
where 筛选条件;
方式二:truncate语句
语法:
truncate table 表名;
注:
① 整个表中的数据全部删除(也称清空数据);
② 不能加where条件
【PS】巧记:(truncate语句)一删全删!
# 两种方式的区别 #:
1. truncate不能加where条件,而delete可以加where条件.
2. truncate 删除效率更高,一删全删.
3. 假如要删除的表中有自增长列, 如果用delete 删除后,再插入数据,自增长列的值从断点开始;
而truncate 删除后,再插入数据,自增长列的值从1开始.
4. truncate删除没有返回值,delete删除有返回值.
5. truncate删除不能回滚,delete删除可以回滚.