DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操 作的单位是记录。
DML主要语句
insert插入
语法:
insert into 表名 values(值列表 )
insert into 表(指定列) select 查询列 from 源表 where 过滤数据;
insert into 表(指定列) values(值列表); insert into 表名 select 查询列 from 源表 where 过滤数据;
--insert into 表名 values(值列表);
insert into dept values(60,'教学部','上海');
--insert into 表(指定列) values(值列表);
insert into dept(deptno,dname) values(70,'营销部');
--insert into 表名 select 查询列 from 源表 where 过滤数据;
insert into emp_his2 select ename,sal from emp where deptno = 30;
--insert into 表(指定列) select 查询列 from 源表 where 过滤数据;
insert into emp_his2(ename) select ename from emp where deptno = 10;
--insert into 表名 values(值列表);//必须给定所有的字段值
--insert into dept(deptno,dname) values(70,'营销部');//指定需要插入的列之后,没有指定的列值为空
搜索到的emp表中的数据,将emp表中deptno=30的数据插入到emp_his2中
emp_his2是通过表的拷贝进行创建的新表
create table emp_his2 as select ename,sal from emp where 1!=1;
insert into emp_his2 select ename,sal from emp where deptno = 30;
--insert into 表(指定列) select 查询列 from 源表 where 过滤数据;
insert into emp_his2(ename) select ename from emp where deptno = 10;
update 更新
update 表名 set 字段=值 [,....] where 过滤行记录;
update dept set dname='A'||dname,loc='青岛' where deptno in (50,60,70);
update dept set loc='三亚' where deptno = 70;
--update 表名 set (字段列表) =(select 字段列表 from 源表 where 过滤源表记录) where 更新记录的条件手动更改字段值:
update dept set (dname,loc) =(select ename,job from emp where empno=7369) where deptno in (50,60);
修改前
语句一修改后
语句二修改后
语句三修改后
update dept set (dname,loc) =(select ename,job from emp where empno=7369) where deptno in (50,60);
将dept中deptno=50和60的字段值的dname和loc改为从emp中找到的empno=7369的字段的ename和job值
3.delete删除
可以删除一个或者多个或者所有的数据
delete from 表名;删除一张表中的所有数据
delete from emp_his2;
删除前:
删除后:
delete (from) 表名 where 过滤行条件
delete dept where deptno = 70;
删除前
删除后:
删除主外键约束关系下的两张表中的数据
从表中的数据可以直接删除
delete from dept where deptno = 60;
删除前emp表:
删除后emp表:
删除主表中的数据
a.主表中没有被从表引用的数据,可以直接删除
delete from dept where deptno = 60;
删除前:
删除后:
b.主表中已被从表引用的数据,不能直接被删除
--dept表中的deptno部门号已经被emp表中的职工引用,故直接删除或会报错
delete from dept where deptno = 10;
解决方案:
删除从表中引用了当前主表数据的那些从表删除,然后再删除当前主表数据->默认
delete from emp where deptno = 10;
delete from dept where deptno = 10;
删除前:
删除后:
删除主表数据的同时,为从表所有引用了当前主表数据的那些从表数据的外键字段设置为null
需要为从表中外键字段设置约束的时候 on delete set null
delete from clazz where cid = 55;
测试数据:
--测试数据
create table clazz(
cid number(5) primary key,
cname varchar2(30)
);
create table student(
sid number(5) primary key,
sname varchar2(30) not null,
--外键约束
cid number(5) references clazz(cid) on delete set null
--cid number(5) references clazz(cid) on delete cascade
);
insert into clazz values(55,'java55');
insert into clazz values(54,'java54');
insert into student values(1001,'zhangsan',55);
insert into student values(1002,'lisi',55);
insert into student values(1003,'wangwu',54);
删除前:
删除后:
删除主表数据的同时,直接删除从表所有引用了当前主表数据的那些从表数据
需要为从表中外键字段设置约束的时候 on delete cascade
cid number(5) references clazz(cid) on delete cascade
删除后: