事务

2020-03-24  本文已影响0人  jiahzhon

事务的特性(ACID)

需要并发控制的原因

丢失更新(更新被破坏导致)

“脏”数据(数据回滚导致)

不可重复读取(更新导致)

幻影数据(插入数据或删除数据导致)

封锁协议

一级封锁协议

二级封锁协议

三级封锁协议

基本的锁类型

排他锁(又叫写锁)(X锁)

共享锁(又叫读锁--全部人读完才能改)(S锁)

锁有“共享锁”、“排它锁”,“共享排它锁”等多种类型,而且每种类型又行级锁 (一次锁住一条记录),页级锁 (一次锁住一页,即数据库中存储记录的最小可分配单元),表级锁 (锁住整个表)。

行级共享锁(RS锁)

行级排他锁(RX锁)

共享行级排他锁(SRX锁)

下图列出产生锁定模式的SQL语句:


1585104938(1).jpg

事务隔离级别

描述 说明
READ UNCOMMITTED 该级别不发出共享锁和排他锁。当使用该选项是,既允许在事务结束前更改数据内的数值,行也可以出现在数据中或从数据集消失。这是4个隔离级别中限制最小的级别。
READ COMMITTED 该级别是oracle默认的事务隔离级。它指定在读取数据时使用共享锁,但不要求在一个事务读取一条记录的间隙,其他事务不能对该记录进行更新。
REPETABLE READ 严格的查询锁,锁定查询中使用的所有数据,以避免其他用户更新这些数据,并要求在一个事务读取同一条记录的间隙,其他事务不能对该记录进行更新。
SERIALIZABLE 数据集(表)上的共享锁,直到该事务完成,才允许其他事务更新数据集或将记录插入到数据集。这是4个隔离级别中限制最高的级别,此并发级别比较低,只在必要时使用。
隔离级别 脏数据 丢失更新 不可重复读 幻影数据
READ UNCOMMITTED YES YES YES YES
READ COMMITTED NO YES YES YES
REPETABLE READ NO NO NO YES
SERIALIZABLE NO NO NO NO

采用默认的READ COMMITTED隔离级别能保证两个事务使用一个UPDATE语句更新行,并且不基于以前检索的值进行更新时不会发生丢失更新的问题。但当两个事务检索相同的行,然后基于原检索的值对行进行更新时会发生丢失更新的问题。

上一篇 下一篇

猜你喜欢

热点阅读