事务属性之隔离性

事务属性之隔离性


目录


并发控制
隔离处理和保证相关操作的正确性是数据库管理系统并发控制中必须涵盖的基本机制。这种机制在数据库和存储引擎中大量使用以保证并发事务的正确执行。
两阶段锁是数据库管理系统中最常用的事务并发控制方法。用于提供可串行和可恢复性质,以保证正确性。为了访问数据库对象,事务先要获得该对象的锁。这依赖于访问操作的类型(如读取或写入对象)和要获取的锁类型,如果锁被其他事务占用,获取锁的时候可能该被阻塞或者可能需要延缓等待一段时间后才能获取。

数据库中的各种锁区别
由于各种资料的关系,很多资料在描述锁的时候采用不同甚至混乱的叫法。诸如共享锁、排它锁、读锁、写锁、Share lock、Exclusive lock、S锁、X锁、显式锁以及隐式锁。
其实这里只有两种锁,比较规范的叫法为读锁和写锁。
共享锁其实就是读锁,排它锁其实就是写锁;Share lock 其实就是读锁,Exclusive lock 其实就是写锁;S锁其实就是读锁,X锁其实就是写锁。
读锁是共享锁,在锁定期间,允许其他事务再对数据加读锁,但不能加写锁,也就是允许其他事务读但不能写。
写锁是排他性的,也称排它锁,在锁定期间,其他事务不能在对数据加读锁或写锁,也就是其他事务读或者写。
另外关于显式锁和隐式锁,隐式锁指的是在数据操作(如增删改查)中其实都会隐式(自动)的进行加锁锁定,但针对不同的操作,加锁的类型不同。显式锁指的是我们可显式的进行加锁设定,如在查询操作中可显示的指定排他操作的写锁。如:
select … from … where … for update


隔离级别
隔离级别在SQL标准(http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)中第4.28 SQL-transactions章节中有定义。


可串行化
这是最高的隔离级别。
在一个基于锁的并发控制的数据库管理系统实现中,可串行化需要在选择的数据上获取读锁和写锁,并在事务结束是释放读锁和写锁。当一个select查询使用的WHERE条件表示一个范围数据的查询时,也必须获取范围锁。
如果使用的是基于无锁(non-lock)的并发控制时,不需要获取锁;但是,如果系统在多个并发事务中检测到一个写冲突时,只有一个被允许提交。

可重复读

提交读

未提交读

读现象
脏读

不可重复读

幻读

隔离级别和读现象的关系

隔离级别 脏读 不可重复读 幻读
未提交读 y y y
提交读 n y y
可重复读 n n y
可串行 n n n


隔离级别和锁定期的关系

隔离级别 写操作 读操作 范围操作(where …)
未提交读 S S S
提交读 C S S
可重复读 C C S
可串行 C C C



1、 https://en.wikipedia.org/wiki/Isolation_(database_systems)
2、 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
3、 BNF Grammar for ISO/IEC 9075:1992 - Database Language SQL (SQL-92), http://savage.net.au/SQL/sql-92.bnf.html
4、
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值