MySQL事务的四大特性以及并发事务问题解读
作者:LMGD
这篇文章主要介绍了MySQL事务的四大特性以及并发事务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
MySQL事务的四大特性以及并发事务
事务的四大特性ACID
原子性(Atomicity):
- 事务是不可分割的最小单元,要么全部成功,要么全部失败。
- (eg:转账案例,转账过程中任何一步操作失败了,那么整个事务就失败了)
一致性(Consistency):
- 事务完成时,必须使所有的数据都保持一致状态。
- (不管是事务执行成功提交,还是事务执行失败回滚了,张三李四账户余额加起是一个恒定值。转账前总和6000,转账后不可能出现两个人的账户总和8000)
隔离性(Isolation):
- 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- (隔离性是指:有并发个事务,事务A、事务B同时操作数据库,A事务在操作的时候不会影响B事务的执行;同理B事务在操作的时候,也不会影响A事务的执行。它们两个事务在独立的环境下运行的,互不影响。)
持久性(Persistence):
- 事务一旦提交或回滚,它对数据库中的数据改变就是永久的。
- (不管是事务执行成功提交了,还是操作异常回滚了,它对数据库的改变时永久的,因为数据库的数据最终是存储在磁盘的,那么存储在磁盘的数据它会被永久的保留下来)
事务-并发事务问题
脏读:一个事务读到另一个事务还没有提交的数据。
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读: 一个事务按照条件查询事务时,没有对应的数据行,但是在插入数据时,又发现这行数据已存在,好像出现了幻影。
并发事务出现的问题-图文描述:
脏读:
- B事务读取A事务修改后(update后)未提交的数据;
- 事务A对id=1 的数据进行了修改,且修改后还未提交事务,此时事务B查询id=1的数据,查到的数据是事务B修改后未提交的数据。这种情况称之为脏读。
不可以重复读:
- A事务一共有4个操作,第一步时查询数据库id=1的数据,第二步执行其他操作时,此时B事务对id=1的数据进行修改(注:并发事务),修改后提交事务。
- A事务执行第三步查询id=1的数据时,和第一步查询id=1的返回结果不一样(因为B事务对id=1的数据进行了修改),这种情况称之为不可以重复读。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。