MySQL事物
什么是事物?
事物是为了保持数据的一致性而提出的概念。
举例来说:小李要给小张转100元,则小李的账户里要少100元,而小张的账户要增加100元,这两个updata语句必须作为一个整体来执行,从而保证数据的一致性这就是事物。
事物的特性
事物应该具有:原子性、一致性、隔离性、持久性四个属性。这四个属性通常称为ACID特性。
- 原子性(atomicity):一个事物是一个不可分割的整体,事物中包括的所有操作要么都做要么都不做。
- 一致性(consistency):事物必须使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的不可分的。
- 隔离性(isolation):隔离性是指相对于其他事物来说,一个事物的执行不能被其他事物干扰,即一个事物内部的操作及使用的数据对并发的其他事物是隔离的,互不干扰的。
- 持久性(durability):持久性也称永久性,指一个事物一旦提交,他对数据库的改变就是永久性的。
事物并发问题
- 脏读:事物A读取了事物B更新的数据,然后B做了回滚操作,则事物A读取到的数据就是脏数据。
- 不可重复度:事物A多次读取同一数据,事物B在事物A多次读取的过程中对数据作了更新,导致A多次读取统一数据时结果不一致。
- 幻读:管理员A将数据库中所有学生的性别从具体性别改为1为男0为女,但是管理员B就在这个时候插入了一条具有具体性别的数据,当管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。