ORACLE进阶操作
1 事务
事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的。
所有的数据库中,事务只针对DML(增删改),不针对select
select只能查看其他事务提交或回滚的数据,不能查看别的事务中正在进行的操作
1.1 事务的特性
- 原子性(Atomicity)
语句级原子性,过程级原子性,事务级原子性
- 一致性(Consistency)
状态一致,同一事务中不会有两种状态
- 隔离性(Isolation)
事务间是互相分离的互不影响
- 持久性(Durability)
事务提交了,那么状态就是永久的
1.2 开启事务
- 执行任意的DML语句,会自动开启事务
--语句级:锁定语句所影响的记录行
update dept set loc = 'beijing' where deptno=10;
- 创建回滚点
--过程级
savepoint a
- 锁定整张表
select * from 表名 for update
1.3 事务语句
commit=commit work:提交事务.将本次事务中的DML操作全部持久化,并结束本次事务
rollback=rollback work:回滚事务.将本次事务中的DML操作全部取消,并结束本次事务
savepoint:手动开启事务,并创建回滚点
rollback to savepoint:回滚到指定的回滚点前,滚点之后创建的回滚点与DML操作无效
1.4 事务锁
当执行事务操作时,Oracle会在被作用的表上加锁,防止其他用户改表。
Oracle保证读一致性,并且永远都不会脏读(即读其他事务的未提交数据)。
--此时其它会话无法修改改行记录
update dept set loc = 'beijing' where deptno=10;
1.5 提交事务
使用commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁。
当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据。
savepoint a;
update dept set loc = 'beijing' where deptno=10;
--提交事务之后,回滚点被自动删除
commit;
1.6 回退事务
保存点是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。
update dept set loc = 'beijing' where deptno=10;
savepoint a;
update dept set loc = 'beijing' where deptno=20;
savepoint b;
update dept set loc = 'beijing' where deptno=30;
--回滚后,回滚点a之后执行的语句全部无效,包括回滚点b的创建
rollback to a;
--回滚全部事务,未提交的事务操作全部失效
rollback;
1.7 注意
在ORACLE中没有提供开始事务处理语句,所有的事务都是隐式开始的。也就是说ORACLE中用户不可以显式使用命令来开始一个事务。
ORACLE任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务隐式的开始。
但是当用户想要处理一个事务处理时,必须显示使用commit和rollback语句结束。