五分钟熟记数据库事务

来源:互联网 发布:数据分析算法 知乎 编辑:程序博客网 时间:2024/05/16 18:23

事务的概念:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。


事务的特性:ACID(速记法:吃一个圆  -持久性,一致性,隔离性,原子性)
⑴ 原子性(Atomicity)
  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
⑵ 一致性(Consistency)
  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态,保持所有数据的完整性。
  拿转账来说,转账前后两个人的账户金额总额应该是一样的。
⑶ 隔离性(Isolation)
  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
⑷ 持久性(Durability)

  持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使出现系统故障也是如此。


没有隔离会导致什么问题
脏读,不可重复读,幻读(速记法:衣服不脏也要换


脏读:一个事务读取到另一个事务还没有提交前修改的值,例如事务b修改了c的值从2修改到1,此时事务a读取属性c的值为1,并使用了这个值,但是事务b出现错误进行回滚,c属性又变为了1,但是事务a是基于没有提交的事务数据做的运算,所以是不对的。


不可重复读:一个事务在两次读取同一记录之间,这条记录被另一事务修改并提交,导致两次读取到的值不一致。


幻读:事务a批量修改数据,将c属性值为2的记录修改成1,修改完之后事务a并没有结束,此时事务b完成并提交一条新记录,且属性c值为2,这时事务a再读取c属性为2的数据发现竟然有一条记录。


产生以上现象的原因是事务穿插执行


为了避免这种现象数据库为我们提供了四种隔离级别:


① Serializable (串行化):事务按顺序一个一个执行,上述三种情况都可避免,但是效率太低。


② Repeatable read (可重复读):除了幻读会发生外其他都不会发生。


③ Read committed (读已提交):可避免脏读的发生。


④ Read uncommitted (读未提交):任何情况都无法保证。


----------------更多精彩内容请关注微信公众号 IT农厂【ITFF01】------------------