Oracle Database 高级事务,游标
隔离级别 | 脏读 | 不可重复读 | 虚读 |
读未提交 Read uncommitted | 可以 | 可以 | 可以 |
读已提交 Read committed | 不可以 | 可以 | 可以 |
可重复读 Repeatable read | 不可以 | 不可以 | 可以 |
可串行化 Serializable | 不可以 | 不可以 | 不可以 |
脏读是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
例如:你银行有1000块,你取出500,但没最终提交,你老婆这时通过ATM查帐,你放弃了取款,这时帐户应该还有1000,但是你老婆看到的是500,于是你老婆提交了,结果你损失了500
Ps: 用线程方式理解------读数据不加锁
不可重复读是指当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。
例如:你用网络察看你银行帐户,你老婆这时用ATM察看,这时你取出了500,你老婆准备取1000块发现不够了…..
Ps: 用线程方式理解------读之前加锁,读完放锁
脏读和不可重复读的区别是,一个未提交读取,一个以提交读取
虚读是指一个事物查询两次,另一个事物在这两次之间插入了数据,导致两次查询的结果不同
Ps: 用线程方式理解------读之前加锁,读完不放锁,直到commit或rollback才放锁
串行化-----完全安全的数据访问模式
Ps: 用线程方式理解------读之前加条件锁,读完不放锁,直到commit或rollback才放锁
commit 提交上一个事物,开始下一个事物
savepoint var 保存点
rollback 回滚到事务开始处,或某保存处
事务
事务是包含一组数据库操作的逻辑工作单元。在事务中包含的数据库操作是不可分割的整体,要么一起被执行,要么回滚到执行事务之前的状态
TCL 事务控制语言 - 数据是否保存到数据库中
commit / rollback / savepoint