MySQL事务总结
事务指的是一个操作序列,该操作序列中的多个操作要么都做,要么都不做。
1、MySQL事务的四大特性
简称:ACID特性
原子性(Atomicity)
每个事务都是不可分割的最小单位,事务中的操作要么全部执行,要么全部不执行
一致性(Consistency)
当事务完成时,数据必须处于一致的状态
隔离性(Isolation)
多个事务的执行互不影响,互不干扰
持久性(Durability)
事务一旦提交,对数据的改变,都要记录到存储中
2、事务并发的问题
多个事务同时执行时,可能存在的问题:
(1)脏读:一个事务读到了其他事务还未提交的数据
(2)不可重复读:一个事务内多次读到同一条数据得到的结果不一样的情况(第一次读取后,被其他事务修改)
(3)幻读:与不可重复读类似,幻读是第二次查询数据多了一些原本不存在的记录。
不可重复读与幻读区别:
不可重复读重点是修改,幻读重点在于新增和删除。
解决不可重复读的问题只需要锁住满足条件的行,而解决幻读则需要锁表;
3、事务的隔离级别
从低到高分为以下四种,隔离级别越低,越能支持高并发的数据库操作。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
READ UNCOMMITTED(读未提交) | 存在 | 存在 | 存在 |
READ COMMITED(读提交) | 不存在 | 存在 | 存在 |
REPEATABLE READ(重复读) | 不存在 | 不存在 | 存在 |
SERIALIZABLE(序列化or串行化) | 不存在 | 不存在 | 不存在 |
MySQL默认的是 REPEATABLE-READ
-- 查看默认的事务隔离级别
SELECT @@transaction_isolation;
-- 设置事务的隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;
(完)