数据库 DML

DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操 作的单位是记录。

DML主要语句

  1. 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;

  1. 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;

删除前

删除后:

删除主外键约束关系下的两张表中的数据

  1. 从表中的数据可以直接删除

 delete from dept where deptno = 60;

删除前emp表:

删除后emp表:

  1. 删除主表中的数据

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

删除后:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值