数据库的隔离级别

2018-07-26  本文已影响0人  Crazy_MC

数据库的四大特性

数据库的隔离级别

  1. Read uncommitted (读未提交)
  2. Read committed(读已提交)
  3. Repeatable read(可重复读)
  4. Serializable (串行化)

数据库隔离级别解决的问题

  1. 脏读
    脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
    示例:A在一个事务里,往T1表里插入了一条记录,此时B另起一个事务,查询T1表可以看到该记录,之后A回滚事务,B在没有关闭事务的情况下,发现该记录消失了。

  2. 不可重复读
    不可重复读是指,在一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
    示例:A在一个事务里,查询表T1的某个字段,此时B修改了T1表的这个字段,A再次查询时,发现该字段发生了变化。

  3. 幻读
    幻读是指,在一个事务执行批量修改时,有新的数据插入,就好像批量修改没玩完成一样。
    示例:A在一个事务里,批量把表T1的某字段从1更新为2,此时B恰好往T1表里插入了一条字段为1的记录。A在执行完操作发现还有一条没修改。

很多人容易搞混不可重复读和幻读,确实这两者有些相似。但不可重复读重点在于update和delete,而幻读的重点在于insert。
如果使用锁机制来实现这两种隔离级别,在可重复读中,该sql第一次读取到数据后,就将这些数据加锁,其它事务无法修改这些数据,就可以实现可重复 读了。
但这种方法却无法锁住insert的数据,所以当事务A先前读取了数据,或者修改了全部数据,事务B还是可以insert数据提交,这时事务A就会 发现莫名其妙多了一条之前没有的数据,这就是幻读,不能通过行锁来避免。

上一篇下一篇

猜你喜欢

热点阅读