/*
DML语句 对表中数据做增删改
1.插入数据 1)insert into 表名 values(....)
2)insert into (字段...) values(...)
3)创建表的同时拷贝表的数据
create table emp as select * from scott.emp
2、修改数据 update 表名 set 列名=值 ,set 列名=值 ... where 条件 ...
3.1、删除数据
1)delete from 表名
--根据表中记录 一条条删除 效率低 可以加条件删除匹配的数据
--可以进行数据恢复
2)truncate table p
--摧毁表结构 重建表结构 效率高
--一般无法数据恢复
3.2存在主外键的情况下 删除主表的记录
1.先删除子表记录 再删除主表记录
2.级联删除 删除主表记录同时 删除子表关联的记录
需要:将on delete cascade 关键字加在创建外键的时候指定级联删除
3.强制删除表,删除主表同时删除外键
*/
--1.1插入数据到p表
insert into p (pid,name) values(5,'zs');
commit;
--1.2创建表的同时拷贝表的数据
select * from scott.emp;
create table emp as select * from scott.emp
--2.1修改SMITH员工的工资 涨100块钱
update emp set sal=sal+100 where ename='SMITH';
commit;
--3.1删除数据、
--数据准备
/*
--创建主表和从表
create table orders(
oid number(9) primary key,
oname varchar2(15),
oprice number(6,2)
)
create table order_detail(
detail_id number(9) primary key,
detail_name varchar2(15),
detail_price number(6,2),
oid number(9),
constraint fk_deail_oid foreign key(oid) references orders(oid)
-- on delete cascade
)
---插入主表和从表的记录
insert into orders values(1,'订单1',1000);
insert into order_detail values(1,'订单1',1000,1);
commit;
---查看两个表的记录
select * from orders;
select * from order_detail;
*/
--3.1删除主表的记录
delete from order_detail where detail_id =1;
delete from orders where oid =1;
--3.2
--删除主表 cascade constraint
drop table orders cascade constraint --删除表的同时删除表的约束
/*
4.1、事务 作为一个逻辑操作单元 特点:任务全部成功或者全部失败
ACID 原子性 一致性 隔离性 持久性
没有隔离级别会有 脏读 虚读 不可重复读
4.2、隔离级别
oracle 只有三个 READ COMMITED ---默认级别
SERIALIZABLE --串行化
READ ONLY ---只读事务
4.3、事务保存点 用于保证执行成功的任务正常提交
声明事务保存点 savepoint 保存点名
出现异常 rollback to 保存点
继续提交 commit;
*/
declare
begin
insert into orders values(1,'订单1',1000);
insert into orders values(2,'订单1',1000);
insert into orders values(3,'订单1',1000);
insert into orders values(4,'订单1',1000);
insert into orders values(5,'订单1',1000);
savepoint s1; --声明保存点
insert into orders values(6,'订单1',1000);
insert into order_detail values(1,'订单1',1000,100);--插入失败
commit;
exception
when others then
rollback to s1;
commit;
end;