快速明白MySQL事务的隔离级别,并发事务导致的问题
事务的四个隔离级别
读未提交、读已提交、可重复读和串行化
隔离作用
让事务之间互相隔离、互不影响,保证事务的一致性。
隔离级别比较
可串行化>可重复读>读已提交>读未提交
隔离对性能的影响:可串行化>可重复读>读已提交>读未提交
隔离级别越高,所需要消耗的MySQL性能越大(如事务并发严重性),为了平衡二者,一般建议设置的隔离级别为可重复读,MySQL默认的隔离级别也是可重复读。
并发事务导致的问题
脏读:一个事务可以读取到另外一个事务未提交的数据
不可重复读:一个事务对同一数据多次读取得到不同结果
幻读:一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来
以下表格表示每个级别可能发生的问题
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 有 | 有 | 有 |
读未提交 | 无 | 有 | 有 |
可重复读 | 无 | 无 | 有 |
串行化 | 无 | 无 | 无 |