事务的四大特性,脏读、不可重复读、幻读和处理脏读,不重复读、幻读的方法

事务:在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。

事务的四大特性(ACID)

  • 原子性(Atomicity):事务是一个完整的操作,事务的各步操作时不可分的(原子的);要么都执行,要么都不执行。
  • 一致性(Consistency):当事务完成时,数据必须处于一致状态。
  • 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖与或影响其他事务。
  • 持久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。

不考虑隔离性会产生三大问题?

  1. 脏读:事务没提交,提前读取(即A事务中读取到B事务未提交的数据,造成数据错误)
  2. 不可重复读:对于数据库中的某个数据,一个事务范围内多次查询却返回不同的数据值,是因为在查询间隔,被另一个事务修改并提交了。
  3. 幻读(虚读):事务非独立执行时发生的一种现象。(即指在一个事务读取到了别的事务插入的数据,导致前后读取不一致)

幻读与不可重复读的区别:

不可重复读查询的都是同一个数据项(重点是修改),而幻读针对的是一批数据整体(重点在于新增或删除)

解决办法:四种隔离级别

由低到高依次分别为读未提交(read uncommited),读提交(read commited),读重复(read repeatable),序列化(serializable)

  • 读未提交:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
  • 读提交:保证一个事务提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。
  • 读重复:防止脏读,不可重复读,确保了一个事务中多个实例在并发读取数据的时候会读到一样的数据。
  • 序列化:花费最高代价但最可靠的事务隔离级别,事务被处理为顺序执行。即在每个读的数据行上加上共享锁。
  脏读 不可重复读 幻读
读未提交 可能出现 可能出现 可能出现
读提交 不会出现 可能出现 可能出现
读重复 不会出现 不会出现 可能出现
序列化 不会出现 不会出现 不会出现

猜你喜欢

转载自blog.csdn.net/Ally441/article/details/105397353
今日推荐