在数据库中两个事务并发执行的时候会产生以下问题:
- 脏读:当有事务修改了一条记录但未提交,另一事务读取该记录前后结果不一致
- 不可重复读:当有事务修改了一条记录并且已经提交,另一事务前后读取该记录前后结果不一致
- 幻读:当有事务新增了记录并且已经提交,另一事务中前后查出记录数不一致
Mysql 对应的事务隔离级别就有:
- 读未提交:会产生脏读(解释:事务未提交前另一个事务即可读取更新数据)
- 读已提交:会产生不可重复读(解释:事务提交后另一个事务即可读取更新数据)
- 可重复读:会产生幻读(解释:事务提交后另一个事务即可读取新增记录)
- 串行化:可避免上述三个问题发生
Mysql 默认的事务隔离级别为:可重复读
Mysql 事务相关命令
-- 查询事务自动提交状态
SHOW VARIABLES LIKE 'autocommit';
-- 设置查询事务自动提交状态,0:不自动提交,1:自动提交
SET autocommit = 0;
-- 查看事务隔离级别,mysql 默认为可重复读:REPEATABLE-READ
select @@transaction_isolation;
-- 设置 READ-UNCOMMITTED 读未提交
set session transaction isolation level read uncommitted;
-- 设置 READ-COMMITTED 读已提交
set session transaction isolation level read committed;
-- 设置 REPEATABLE-READ 可重复读(默认的事务隔离级别)
set session transaction isolation level repeatable read;
资料参考:
https://cloud.tencent.com/developer/article/2194424
标签:事务,隔离,--,READ,提交,mysql,级别,读取 From: https://www.cnblogs.com/baokang/p/18531108