文章目录
命令
查看MySQL当前的隔离级别
/*方式一*/
select @@tx_isolation;
/*方式二*/
show variables like 'tx_isolation';
设置MySQL的隔离级别
/* read uncommitted/read committed/repeatable read/serializable */
set session transaction isolation level read uncommitted
开启事务 start transaction
提交事务 commit
回滚事务 rollback
设置事务自动提交是否开启
关闭事务自动提交:set autocommit=0;
注:值0和OFF都是一样的,当然,1也就表示ON。
查看是否开启自动提交功能:show variables like 'autocommit';
事务隔离级别演示
问题 | 描述 | 要求 |
---|---|---|
脏读(Dirty Reads) | B事务读到了A个事务未提交的数据。 | B事务要读取A事务已经提交的数据。 |
不可重复读(Non-Repeatable Reads) | 一个事务中两次读取的数据不一致。 | 一个事务中多次读取的数据是一致的。 |
虚/幻读(Phantom Reads) | 一个事务中两次读取到的数据的条数不一致。 | 一个事务多次读取的数据的条数是一致的。 |
隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 |
---|---|---|---|---|
READ UNCOMMITTED | Yes | Yes | Yes | No |
READ COMMITTED | No | Yes | Yes | No |
REPEATABLE READ | No | No | Yes | No |
SERIALIZABLE | No | No | No | Yes |
数据准备
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account`