事务是保证数据库能够操作完整,要么执行,要么不执行。

事务特征

原子性:表示对数据库操作要么全部成功,要么全部不成功
一致性:对数据库操作的数据要保持一致,比如a向b转100元,a会减少100,b会增加100
隔离性:并发操作数据时,对数据交叉操作不会造成数据混乱
持久性:对事务操作之后数据就永久改变存储在磁盘中了

事务隔离级别

总共有4个隔离级别,最低的一种是未提交读:当a开启事务,b也开启事务,a在修改数据未提交时,b也可以
读取到a已改的数据,这时读到的数据可能是脏读数据
第二种 是读已提交:当a开启事务,b开启事务,a修改数据未提交时,b读取不到a提交的数据,要等a提交完成才能够读取到,这容易造成在相同时间内读取到不一样的数据,对数据造成不可重复读。
第三种是可重复读:当a开启事务时,b开启事务时,a操作数据,未结束事务时,b是读取不到的,所以对b这一操作是不会有影响,但是当a提交事务完成后,b再去查询,会发现数据已经改变,这个可能造成幻读。
第四种是串行化,当a开启事务时,b开启事务,当b想修改的时候,他是会卡住的,不能修改的,他要等a完成事务之后才能够进行操作,但是在此之前他可以查。

平时会选择哪种隔离级别,你们项目中用到的是哪种级别
mysql默认的是可重复读级别,他在mysql5.0之前,由于主从复制的关系,使用读已提交,会有bug,记录数据库更改的文件选择的是statement格式(记录执行语句模式)。比如在主机上操作的是先删除后修改操作,他在记录上形成的是先修改删除,传给从机的也会是修改删除,那么这个就会出现顺序不一致的情况