Spring事务_02_事务的隔离级别

Spring事务_事务的隔离级别_02

事务的隔离级别

尽管数据库为用户提供了锁的DML操作方式,但直接使用锁管理是十分麻烦的,因此数据库为用户提供了自动锁机制。

只要用户指定会话的事务隔离级别,数据库就会分析事务中的SQL语句,然后自动为事务操作的数据资源添加上合适的锁。此外数据库还会维护这些锁,当一个资源上的锁数据太多时,自动劲松锁升级以提高系统的运行性能,而这一过程对用户来说是完全透明的。

  • ANSI/ISO SQL标准定义了4个等级的事务隔离级别,在相同的环境中,使用相同的输入,执行相同的工作,根据不同的隔离级别,可以导致不同的结果。不同的事务隔离级别能够解决的数据并发问题的能力是不同的。
隔离级别 脏读 不可重复读 幻象读 第一类丢失更新 第二类丢失更新
read uncommitted 允许 允许 允许 不允许 允许
read committed 不允许 允许 允许 不允许 允许
repeatable read 不允许 不允许 允许 不允许 不允许
serializable 不允许 不允许 不允许 不允许 不允许

事务的隔离级别和数据库的并发性是对立的,两者此增彼长,一般来说使用Read uncommited隔离级别的数据库拥有最高的并发性和吞吐量,而使用Serializable事务隔离级别数据库的并发和吞吐量最低。

SQL 92定义Read uncommited主要提供非阻塞读的能力,Oracle虽然也支持Read uncommited级别的事务,但是它不支持脏读,所以Oracle的Read Committed就满足了SQL 92标准的repead read级别。

SQL 92推荐使用repeatable read来保证数据库的对一致性。

总结

  1. 数据库事务ACID

     - 原子性  -要么成功,要么失败
     - 一致性  -数据库的操作要和业务最终一致,A向B转账,不管成功或失败,账款总额不变
     - 隔离性  -事务之间是独立的,相互不影响
     - 持久性  -事务一旦提交,所有的数据必须持久化到数据库中
    
  2. 数据库事务并发问题

     五中问题(3中数据访问问题2中更新问题)
     1. 数据脏读 -A事务读取了B事务未提交的数据
     2. 数据不可重复读 -A事务中两次读取不一致
     3. 数据幻象读 -统计事务中,两次统计过程新增数据
     4. 第一种更新丢失 -A事务撤销覆盖了B事务的提交数据
     5. 第二种更新丢失 -A事务提交覆盖了B事务的更新数据
    
  3. 数据库使用锁机制解决数据并发问题

     数据库锁机制解决数据并发问题
     - 行级共享锁
             -不阻止事务更新但是禁止表独占锁
     - 行级独占锁
             -防止其他事务获得共享锁定,共享独占锁定或者独占锁定
     - 表共享锁定  
             - 防止其他事务表共享行独占锁或表独占锁定,允许在表中拥有多个行共享
             - 和表共享锁定,该锁定可以让会话具有表事务级一致性访问。
     - 表共享行独占    
             - 防止其他会话获得表共享、行独占、或者表独占锁定。允许其他行共享
             - 定.只是一个表一次只能放置一个表共享行锁定。
     - 表独占 
             - 防止其他任何会话锁定
    
  4. 由于数据库锁机制比较麻烦,数据库提供隔离事务级别自动分析SQL添加锁

     事务级别
     read uncommitted  
         - 允许:脏读、不可重复读、幻象读、第二种更新丢失
         - 不允许:第一种更新丢失
     read committed
         - 允许:不可重复读,幻象读,第二种更新丢失
         - 不允许:脏读,第一种更新丢失 
     repetable read 
         - 允许:幻象读
         - 不允许:脏读、不可重复读、第一种更新丢失、第二种更新丢失
     serializable
         - 不允许:脏读、不可重复读、幻象读、第一种更新丢失、第二种更新丢失
    

不是所有的数据库都支持事务,即支持事务的数据库也并非支持所有的事务隔离级别,可以通过JDBC的Connection.getMetaData()方法获取DataBaseMetaDate对象,并通过该对象的supportTransctaions().supportsTransactionIsolationLevel(int level)方法查看地城数据库的支持情况。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容