MySQL事务和事务的四种隔离级别 for INNODB
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,什么是事务一组原子性的SQL语句,可以提交或回滚的原子工作单元 。当事务对数据库进行多次更改时,要么在提交事务后所有更改成功,要么在回滚事务时撤消所有更改。事务特性ACID特性A: atomicity
千家信息网最后更新 2026年11月03日MySQL事务和事务的四种隔离级别 for INNODB
什么是事务
一组原子性的SQL语句,可以提交或回滚的原子工作单元 。当事务对数据库进行多次更改时,要么在提交事务后所有更改成功,要么在回滚事务时撤消所有更改。
事务特性
ACID特性
- A: atomicity(原子性):整个事务中的所有操作要么全部成功,要么全部失败后回滚;
- C: consistency(一致性):整个数据库总是从一个一致性状态转换为另一个一致性状态;
- I: isolation(隔离性):一个事务所做的的操作在提交之前,是不被其它事务所见的;
- D: durability(持久性):事务一旦提交,其所做的修改会永久保存于数据库中。
事务生命周期
事务管理
显式启动事务:
BEGINBEGIN WORKSTART TRANSACTION结束事务:
# 提交COMMIT# 回滚ROLLBACK注:只有事务型的存储引擎的DML语句才能支持此类操作
自动提交:
默认为1,为0时设为非自动提交> show variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+---------------+-------+1 row in set (0.00 sec)set autocommit={1|0}注:建议显式请求和提交事务,而不要使用"自动提交"功能。
事务支持保存点:
SAVEPOINT identifierROLLBACK [WORK] TO [SAVEPOINT] identifierRELEASE SAVEPOINT identifier查看事务:
# 查看当前的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;#查看当前锁定的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;#查看当前等锁的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;事务隔离级别
MySQL事务支持四种隔离级别,从上至下更加严格
| 事务隔离级别 | 说明 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加读锁 |
|---|---|---|---|---|---|
| READ UNCOMMITTED | 可读取到未提交数据,产生脏读 | Yes | Yes | Yes | No |
| READ COMMITTED | 可读取到提交数据,但未提交数据不可读,产生不可重复读,即可读取到多个提交数据,导致每次读取的数据不一致 | No | Yes | Yes | No |
| REPEATABLE READ | 可重复读,多次读取数据都一致,产生幻读,即读取过程中,即使有其它提交的事务修改数据,仍只能读取到未修改前的旧数据。此为MySQL默认设置 | Yes | Yes | Yes | No |
| SERIALIZABLE | 可串行化,未提交的读事务阻塞修改事务(加读锁,但不阻塞读事务),或者未提交的修改事务阻塞读事务(加写锁,其它事务的读,写都不可以执行)。会导致并发性能差 | No | No | No | Yes |
MVCC和事务的隔离级别
MVCC(多版本并发控制机制)只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作。其他两个隔离级别都和MVCC不兼容,因为READ UNCOMMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行。而SERIALIZABLE则会对所有读取的行都加锁
如何指定事务隔离级别
参考:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tx_isolation
1.系统变量tx_isolation指定,默认为REPEATABLE-READ,有效范围:Global, Session
# 语法:set tx_isolatioin='value';# 有效值READ-UNCOMMITTEDREAD-COMMITTEDREPEATABLE-READSERIALIZABLE2.服务器选项中指定
在/etc/my.cnf文件的[mysqld]块中使用transaction-isolation选项设置[mysqld]transaction-isolation = value事务隔离级别验证
背景:通过两个终端显示启动两个事务来验证,用作验证的user表的表内容和表结构如下
mysql> desc user;+-------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+------------------+------+-----+---------+----------------+| id | int(10) unsigned | NO | PRI | NULL | auto_increment || name | varchar(30) | NO | | NULL | |+-------+------------------+------+-----+---------+----------------+2 rows in set (0.00 sec)mysql> select * from user;+----+-------+| id | name |+----+-------+| 2 | root || 3 | admin |+----+-------+2 rows in set (0.00 sec)1.READ UNCOMMITTED级别
2.READ COMMITTED级别
3.REPEATABLE READ级别
4.SERIALIZABLE级别
未提交的读事务阻塞修改事务(加读锁,但不阻塞读事务)
未提交的修改事务阻塞读事务(加写锁,其它事务的读、写都不可以执行)

注:此种事务隔离级别会导致并发性能差。
附加案例:如果一个事务产生了写锁,然后一直未结束事务,这样会导致其它事务的读、写都不可以执行,对于这种情况,可以找到未结束并且导致阻塞的事务,手动将其kill。
拿上面未提交的修改事务阻塞读事务的案例来验证
打开第三个会话执行以下操作
死锁
事务
级别
数据
隔离
阻塞
一致
两个
要么
验证
一致性
原子
可能性
数据库
支持
有效
成功
事务所
性能
案例
版本
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网高科技
广州为想互联网科技有限公司
上海睿民互联网科技有限公司
互联网佳科技有限公司
厦门中拓互联网络科技有限公司
互联网科技社
互联网科技开发公司
深圳科技互联网
互联网还是高科技吗
世界互联网科技公司市值排名
青岛科技大学互联网大赛研究生
互联网数据科技专业
互联网科技如何创业
山东星卡互联网科技有限公司官网
扫呗互联网科技有限公司
济南小医互联网科技有限公司招聘
中国新注册互联网科技
瑞安市蟠桃会互联网科技有限公司
互联网科技自媒体灵感
中国主要互联网科技公司
互联网科技会
金诺互联网科技
万易互联网科技
互联网科技集团
云电互联网科技
重庆科技学院互联网
中盈科技互联网信息有限公司
以后互联网后是啥科技
阿大互联网科技有限公司
恒生互联网科技业指数调整周期