数据库隔离级别 及 其实现原理

我这4种隔离级别的相应原理总结如下:


READ_UNCOMMITED 的原理:

  • 事务对当前被读取的数据不加锁;
  • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级共享锁,直到事务结束才释放。

表现:

  • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,能读到事务2对该记录的修改版本,即使该修改尚未被提交。
  • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

READ_COMMITED 的原理:

  • 事务对当前被读取的数据加 行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁;
  • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。

表现:

  • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的只能是事务2对其更新前的版本,要不就是事务2提交后的版本。
  • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

REPEATABLE READ 的原理:

  • 事务在读取某数据的瞬间(就是开始读取的瞬间),必须先对其加 行级共享锁,直到事务结束才释放;
  • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。

表现:

  • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的仍然是第一次读取的那个版本。
  • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

SERIALIZABLE 的原理:

  • 事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放;
  • 事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。

表现:

  • 事务1正在读取A表中的记录时,则事务2也能读取A表,但不能对A表做更新、新增、删除,直到事务1结束。
  • 事务1正在更新A表中的记录时,则事务2不能读取A表的任意记录,更不可能对A表做更新、新增、删除,直到事务1结束。
时间: 2024-10-21 17:56:06

数据库隔离级别 及 其实现原理的相关文章

数据库隔离级别深入理解(ORACLE)

TRANSACTION_READ_UNCOMMITTED 1 这种隔离级别最低,脏读,不可重复读,幻读都会发生,我用的oracle,并没有支持这个级别,不作研究. TRANSACTION_READ_COMMITTED  2  This is the default transaction isolation level. Each query executed by a transaction sees only data that was committed before the query

数据库隔离级别和锁

数据库隔离级别和事务锁 1.         问题提出 a)         更新丢失 两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了.这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来. b)        脏读 一个事务读取到了另一个事务未提交的数据操作结果.这是相当危险的,因为很可能所有的操作都被回滚. c)         不可重复读 不可重复读(Non-repeatable Reads):一个事务对同一行数据重复读取两次,但是却得到了不同的结

springmvc 事务控制与数据库隔离级别

springmvc 事物传播与数据库隔离控制 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html 一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.PROPAGATION_SUPPORTS

SQL SERVER 2008 数据库隔离级别代码演示

SQL SERVER 2008 数据库隔离级别代码演示 ? 在各种SQL 的教程上一直都强调SQL SERVER 的4个隔离级别(其实这是SQL 工业标) 未提交读 ReadUncommited? 已提交读 ReadCommited? 不可重复读 RepeatableRead? 序列化 Serializable (为什么叫这个么名字?) 这4种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性(并发性) 之间博弈.简单的说,灵活性越高,隔离性越差

数据库隔离级别

转自 http://blog.csdn.net/fg2006/article/details/6937413 本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 R

数据库隔离级别详解

事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性:保证事务中的所有操作全部执行或全部不执行.例如执行转账事务,要么转账成功,要么失败.成功,则金额从转出帐户转入到目的帐户,并且两个帐户金额将发生相应的变化:失败,则两个账户的金额都不变.不会出现转出帐户扣了钱,而目的帐户没有

浅谈数据库隔离级别

本文介绍了关系型数据库的隔离性.ANSI标准里面定义了Read Committed, Repeatable Read, Serializable隔离级别,Jim Gray等针对ANSI的标准提出了改进,并介绍了Cursor Stability, Snapshot Isolation等隔离级别. http://loopjump.com/db_isolation_level/

【转】数据库隔离级别详解----学习笔记

http://blog.sina.com.cn/s/blog_616b428f010163bo.html 事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性:保证事务中的所有操作全部执行或全部不执行.例如执行转账事务,要么转账成功,要么失败.成功,则金额从转出帐户转入到目的帐

百度面试(数据库隔离级别、overload、override)

1.  数据库的隔离级别 ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).         READ UNCOMMITTED READ UNCOMMITTED是限制性最弱的隔离级别,因为该级别忽略其他事务放置的锁.使用READ UNCOMMITTED级别执行的事务,可以读取尚未由其他事务提交的修改后的数据值,这些行为称