一.事务的基本要素(ACID)
1.原子性:事务开始后的所有操作,要么全部昨晚,要么全部不做,不可能停止在中间的环节。事务执行过程中会出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样,也就是说事务是一个不可分割的整体,就想化学中的原子,即物质的最小单位。
2.一致性:事务开始前和结束后,数据库的完整性约束没有被破坏,其实一致性也是因为原子型的一种表现。
3.隔离性:同一时间,只允许一个事物请求同一数据,不同的事物之间彼此没有热和干扰。
4.持久化:事物完成后,事务对数据库的所有更i性能将被永久的保存到数据库中,
二、事物并发的问题
1。脏读:事物A读取了事物B更新的数据,然后B回滚操作,那么A读取的数据就是脏数据,与表中的最终数据不一致。
2.不可重复读:事物A多次读取统一数据,事物B在事物A多次读取中的过程中,对数据作了更新并提交,导致事物A多次读取的数据不一致。读取结果与上次的结果不一致。
3.幻读:事物A在查询表中数据的时候,事物B执行添加或者删除,导致事物A再次读取表中的数据的,和上次读取的数据不一致,或增或减。这就是幻读。
不可重复读和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或者删除。解决不可能重复读的问题,只需要锁住满足的行就行,而幻读则需要锁住表。
MySQL的默认事务隔离级别是可重复读时并不会锁住度的行
隔离级别越高,越能保证数据的完整和一致性,但是对并发性能的影响也越大,鱼和熊掌不兼得,对于多数应用,可以优先考虑把数据库系统的隔离级别设为Read Committed 它能狗避免获取脏数据,而且具有较好的并发性能,尽管导致不可重复读,幻读这些并发问题,可以采用悲观锁和乐观锁来控制。