ACID
A(atomicity) 原子性:一个事物中的所有操作要么都成功,要么都失败
C(consistency) 一致性:数据库总是从一个状态转换到另一个转态
I(isolation) 隔离性:一个事物提交前对另一个事物是不可见的(与隔离级别有关)
D(durability) 持久性:事物一旦提交,数据就永久保存到数据库中
隔离级别
read uncommitted 未提交读 脏读
可以读到另一个事物未提交的数据
red commited 提交读 不可重复读
只能读取到事物提交后的数据。如果B事务在A事务的2次查询中修改了数据,那么A事务两次查询到的结果将不同
repeatable read 可重复读(默认隔离级别)
保证一个事务多次读取同样记录的结果是一致的。
例子:事务A查询id=1的记录name=‘yyy’,此时事务B修改id=1的记录name=‘aaa’并提交事务,事务A再次查询id=1的记录name依然=‘yyy’。
但是如果读取的是一个范围的记录,其他事务在这个范围内插入了新的记录,将导致幻读。
例子:事务A查询id<5的记录,返回id为1、2、3的三条记录,事务B插入id=4的记录并提交事务,此时事务A将读到四条记录。
MySQL的innoDB引擎通过多版本并发控制解决了幻读问题
serializable 可串行化
事物排队,加锁 阻塞