Mysql事务

1. 事务

1.1. 基本特性ACID

  • 原子性Atomicity
  • 一致性Consistency
  • 隔离性Isolation
  • 持久性Durability

 

1.2. 隔离级别

  • READ UNCOMMITTED(读未提交)
  • READ COMMITTED(读已提交)
  • REPEATABLE READ(可重复读)
  • SERIALIZABLE(串行化)

1.2.1. 查看隔离级别

show variables like 'transaction_isolation';
-- 或者
select @@transaction_isolation;

 

1.2.2. 修改全局隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

 

1.3. 事务提交

1.3.1. 查看事务自动提交状态

SHOW VARIABLES LIKE 'autocommit';

 

1.3.2. 修改事务自动提交状态

SET autocommit = 0|1|ON|OFF;

1.4. 不同隔离级别的后果

  • 脏读
  • 不可重复读
  • 幻读

隔离级别 \ 后果

脏读

不可重复读

幻读

读未提交

读已提交

不会

可重复读

不会

不会

串行化

 

2. 不同隔离级别演示

2.1. READ UNCOMMITTED

脏读:读到其他事务未提交的数据

2.1.1. 隔离级别

 

2.1.2. 事务一:查询account数据

事务一开启

 

2.1.3. 事务二:更新账户信息

事务二开启

⚠️事务二未提交

 

2.1.4. 事务一:查询account数据

 

2.1.5. 事务二:回滚事务

 

2.1.6. 事务一:查询account数据

 

2.2. READ COMMITTED

不可重复读:同一个事务中,两次读到的数据不一致

2.2.1. 隔离级别

 

2.2.2. 事务一:查询account数据

事务一开启

 

2.2.3. 事务二:更新账户信息

事务二开启

 

2.2.4. 事务二:提交事务

事务二提交

 

2.2.5. 事务一:查询account数据

事务一中两次查询到的数据不一致

 

2.3. REPEATABLE READ

幻读:同一个事务中,查询到没有数据却无法插入数据

 

2.3.1. 隔离级别

 

2.3.2. 事务一:查询account数据

事务一开启

 

2.3.3. 事务二:插入账户信息

事务二开启

事务二结束

 

2.3.4. 事务一:查询account数据

 

2.3.5. 事务一:插入账户信息

插入数据失败,查询account表中id=3的数据为空,此信息为幻读。

 

 

 

 

 

 

 

 

posted @   在路上的Spike007  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示