事务的隔离级别

事物并发产生的问题

  • 脏读

    事物A读取了事物B已经修改但未提交的数据。如果事物B发生回滚则脏读出现。

  • 不可重复读

    事物A第一次读取后事物B进行了修改并提交,当事物A再次读取时发现两次读取不一致,这就是不可重复读。侧重的是数据的修改。

  • 幻读

    事物A第一次读取并修改了一批数据但未提交,并行的事物B插入或者删除了部分数据并提交,当事物A提交数据时发现数据数量或内容不对,这就是幻读。侧重的是数据的插入或删除。


事物的四种隔离级别

  • read uncommitted读未提交

读写可并行,可以读到未提交数据,将导致脏读。

读读可并行,读写可并行,写写不可并行。

  • read committed读已提交

只能读到提交的数据,排除了脏读但可能造成不可重复读。

读读可并行,读写可并行,写写不可并行。

  • repeatable read可重复读

读数据时对读出的数据加锁防止写操作,避免了脏读和不可重复读但可能造成幻读。mysql默认的方式。

读读可并行,读写不可并行,写写不可并行。

  • serlalizable可串行化

所有事物均排队串行执行,级别最高,效率最低。

Spring事物传播机制

  • REQUIRED:没有就新建,有就加入。默认设置
  • SUPPORTS:有事务就加入,没有则以非事务执行
  • MANDATORY:有事务就加入,没有则报异常
  • REQUIRES_NEW:任何情况都创建新事物
  • NOT_SUPPORTED:如果当前存在事务,就把当前事务挂起
  • NEVER:如果当前存在事务,则抛出异常
  • NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。区别是嵌套事务,外层的事务如果回滚,会导致内层的事务也回滚;但是内层的事务如果回滚,仅仅是回滚自己的代码,不影响外层的事务的代码


版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!

本文出自:monkeyGeek

座右铭:生于忧患,死于安乐

欢迎志同道合的朋友一起交流、探讨!

monkeyGeek
#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×