概述 索引是MySQL的数据结构,关系着MySQL如何存储数据,查询数据;而如何操作数据,解决多线程时操作数据带来的问题,则需要通过事务来完成。 InnoDB引擎支持事务,MyISAM引擎不支持事务 ACID 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。 持久性(Durable):事务完成之后,它对于数据的修改是永久性的。 用大白话说: 原子性:事务里的所有操作,要么是commit全部提交成功,要么是rollback全部回滚。 一致性:个人认为更多在于业务操作,如A用户向B用户转账100,必须是A-100, B+100,不能出现A转账成功,B未收到情况。 隔离性:A事务在操作数据时,不受B事务影响。这点会在本文详细说明。 持久性:对数据的所有成功操作,都会落到磁盘上。 事务隔离级别 InnoDB中,一共有四种隔离级别:读未提交、读已提交、可重复读、可串行化。默认为可重复读。 它们分别会对应一些并发问题,如表格所示: 隔离级别 脏读 不可重复读 幻读 读未提交 有可能 有可能 有可能 读已提交 不可能 有可能 有可能 可重复度 不可能 不可能 有可能 可串行化 不可能 不可能 不可能 脏读:事务A读取到了事务B已经修改但尚未提交的数据,还在这个数据基础上做了操作。此时,如果B事务回滚,A读取的数据无效。 不可重复读:一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了。 幻读:...