Oracle事务和锁,及闪回表举例
程序员文章站
2024-01-14 09:02:34
...
1. 事务和锁
--事务的ACID特性
--原子性:事务的各个组成部分不可分割,要么一起成功执行,要么一起不执行。
--一致性:事务的执行只能让数据库从一个正常状态转移到另一个正常状态。
--何 200 伍 200 陈 200 状态1
--何 100 伍 200 陈 300 状态2
--何 200 伍 100 陈 300 状态3
--何 100 伍 100 陈 400 状态4
--隔离性:事务1无法看到事务2未提交的结果
--持久性:事务一旦提交,无法回滚。
--DML数据操纵语言 insert update delete
--DDL数据定义语言 create alter drop等
--DCL数据操作语言 commit,rollback grant remove等
--事务有一个或者多个DML,加一个DDL或者一个DCL组成
--DML不会自动提交,所以事务没有结束
--DDL和DCL会自动提交,所以事务结束
--提交前,数据库数据没有真正发生变化
--当前事务可以看到变化后的效果,其它事务看不到
--提交后,数据库数据真正发生变化,其它事务看到新的状态
--锁
--查询不加锁
--DML加行级独占锁,表级共享锁。
--DDL操作加表独占锁。
--独占锁:加锁后不允许别的事务再加锁
--共享锁:加锁后,允许其它事务加共享锁,不允许加独占锁。
--加表级共享锁,表示该表为正在修改数据,不能对该表做DDL操作。
--有多少个事务正在修改数据,就会有多少个表共享锁。
--保证了所有数据被提交后,才能修改表的结构。
--查询加锁:改变查询不加锁的情况,在查询时手动加上锁,保证后面修改数据时查询结果没有变。
select * from stu2 for update;
--加表级共享锁
lock table stu2 in share mode;
--加表级独占锁
lock table stu2 in exclusive mode;
--死锁
--事务1占有资源1,请求资源2;同时事务2占有资源2,请求资源1
2. 闪回表
drop table stu2;
--闪回表
--在哪里
select * from user_recyclebin;
--还原
flashback table stu2 to before drop;
--清空回收站
purge recyclebin;
--直接完全删除表
drop table stu2 purge;