DML语言
DML(Data Manipulation Language)数据操纵语言
DMl用于改变数据库中的数据,包括INSERT(插入),UPDATE(更新),DELETE(删除)
insert
作用,向表中插入数据
insert into 表名(列1,列2,..) values (值1,值2,...);
例如:向表中的每一个列中依次插入数据,需要和列表名的顺序一致
insert into t_user values(1,'tom','abc1@qq.com','f',20,'11-8月-94');
例如:向表中的指定列插入指定数据
insert into t_user(id,name,email,gender,age,birthday) values (2,'tom','ab2@qq.com','f',20','11-8月-94');
例如:把查询的结果插入到表中
insert into t_user(id,name,birthday)
select id,last_name,start_date
from s_emp;
update
作用,修改表中的数据
update 表名 set 列1=值1,列2=值2,...where 条件;
例如:修改表中所有数据,更新age值为20
update t_user set age = 20;
例如:修改表中所有数据的age和gender的值
update t_user set age=25,gender='m';
例如:修改表中id小于10的数据,修改age和gender的值为null
update t_user set age = null,gender=null where id<10;
例如:修改id为18的用户的名字为zhangsan
update t_user set name = 'zhangsan' where id=18;
delete
作用删除表中的数据
delete from 表名 where 条件;
例如:删除表中id大于20的用户信息
delete from t_user where id>20;
例如:删除表中所有的数据(注意这里的表没被删除,删除的是表中的数据)
delete from t_user;
有关联的两张表进行DML操作
insert语句
假设有如下两张表
t_customer是主表,t_order是附表
此时再往t_customer表中插入数据
往t_order表中先插入两个数据,customer_id外键列的值必须是t_customer表id列中出现过的
当往t_customer表中的id列插入数值6时,会报错,因为6这个值并没有存在在t_customer表中。
补充:
(1)默认情况下,外键列上的值是可以重复的,在外键列上加一个唯一约束,那么这个外键列的值就不能重复了
(2)默认情况下,外键列上的值是可以为空的,在外键列上加一个非空约束,那么这个外键列的值就不能为null了
update语句
向t_customer表中插入数据
向t_order表中插入数据
把t_order表中id=1的数据的customer_id列修改为3
把t_order表中id=1的数据的customer_id列修改为null
把t_order表中id=1的数据的customer_id列修改为20
这个语句报错,因为没有id=20的值
delete语句
删除附表中的数据不会影响主表
附表外键列没有引用主表中的指定值时,可以删除主表对应中的数据,如下
(1)向t_order表中插入数据
(2)删除t_customer表中id=3的数据
删除成功,因为t_order表中外键列中没有引用过这个值
(3)当附表外键列引用了主表中的值的时候,可以使用级联删除,如下
删除t_customer表中id=1的数据
删除失败,t_order表中外键列中已经引用了这个值,这个时候就可以使用on delete xxx 语句了
用户在删除A表中的一条数据,而这条数据被B表中的外键列所引用了,这个时候on delete xxx语句的设置可以告诉oracle这个时候该如何处理
- on delete no action
- on delete cascade
- on delete set null
(1)
(2)级联删除
此时就可以级联删除了
(3)
删除成功了,同时把t_order表中所关联的那条数据的外键设置为了null
注意,如果t_order表中customer_id列上有not null 约束,那么当前这个删除操作就会报错