欢迎投稿

今日深度:

事务的隔离级别,事务隔离级别

事务的隔离级别,事务隔离级别


数据库系统有四个隔离级别,分别为未提交读、已提交读、可重复读、串行化

大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。Mysql的默认隔离级别就是Repeatable read。


READ UNCOMMITTED(未提交读)

事务A执行的操作未提交,但是事务B还是能看到修改,这时会产生脏读的情况。

READ COMMITTED(提交读)

事务A先是读取了数据,这时事务B更改了同一数据,并已提交,这时事务A再次读取这个数据时就会发现两次数据不一致,这就产生不可重复读的现象。

REPEATABLE READ(可重复读)

当事务A读取记录时,会对此记录添加一个共享锁,即事务B不能在事务A结束前对记录进行修改。

可能产生的问题:当执行范围查询时,可能会产生幻读。如事务A先查询一个消费总量,接着事务B增加一条消费记录,这时事务A再次查询消费总量时,就会发现两次查询不一致

SERIALIZABLE(序列化)

添加范围锁(比如表锁,页锁等、),直到transaction A结束。以此阻止其它transaction B对此范围内的insert,update等操作。幻读,脏读,不可重复读等问题都不会发生。


脏读

不可重复读

幻读

Read uncommitted

Read committed

×

Repeatable read

×

×

Serializable

×

×

×





事务的隔离级别有什

oracle事务隔离级别:

读取未提交:TRANSACTION_READ_UNCOMMITTED(最低)
读取提交:TRANSACTION_READ_COMMITTED(默认)
可重读:TRANSACTION_REPEATABLE_READ
可串化:TRANSACTION_SERIALIZABLE(最高)
 

jdbc事务隔离级别有几种

1. RR隔离级别: 在此隔离级别下, DB2会锁住所有相关的纪录。 在一个SQL语句执行期间, 所有执行此语句扫描过的纪录都会被加上相应的锁。 具体的锁的类型还是由操作的类型来决定, 如果是读取,则加共享锁; 如果是更新, 则加独占锁。 由于会锁定所有为获得SQL语句的结果而扫描的纪录, 所以锁的数量可能会很庞大, 这个时候, 索引的增加可能会对SQL语句的执行有很大的影响,因为索引会影响SQL语句扫描的纪录数量。

2. RS隔离级别: 此隔离级别的要求比RR隔离级别稍弱,此隔离级别下会锁定所有符合条件的纪录。 不论是读取, 还是更新, 如果SQL语句中包含查询条件, 则会对所有符合条件的纪录加相应的锁。 如果没有条件语句, 也就是对表中的所有记录进行处理,则会对所有的纪录加锁。

3. CS隔离级别: 此隔离级别仅锁住当前处理的纪录。

4. UR隔离级别:此隔离级别下,如果是读取操作,不会出现任何的行级锁。对于非只读的操作,它的锁处理和CS相同
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3930.html NewsArticle 事务的隔离级别,事务隔离级别 数据库系统有四个隔离级别,分别为 未提交读、 已提交读、可重复读、 串行化 大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。 Mysql的...
相关文章
    暂无相关文章
评论暂时关闭