千家信息网

Mysql Innodb事务隔离级别指的是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下Mysql Innodb事务隔离级别指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mysql的
千家信息网最后更新 2026年11月01日Mysql Innodb事务隔离级别指的是什么

小编给大家分享一下Mysql Innodb事务隔离级别指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Mysql的事务隔离级别有四种,如下:

1、Read Uncommitted:它允许读取其它事务改变但未提交的脏数据,同样会导致不可重复读和幻读问题。

2、Read Committed:可避免读取脏数据,依然会导致不可重复读和幻读问题。

3、REPEATABLE-READ:Mysql默认隔离级别,会导致幻读.但mysql此级别采用MVCC一致性读,也不会产生幻读。

4、Serializable:最高隔离级别,会避免出现上面的问题.

可用以下方法查看当前系统的隔离级别

mysql> select @@global.tx_isolation,@@tx_isolation;+-----------------------+-----------------+| @@global.tx_isolation | @@tx_isolation  |+-----------------------+-----------------+| REPEATABLE-READ       | REPEATABLE-READ |+-----------------------+-----------------+1 row in set (0.00 sec)

未提交读READ-UNCOMMITTED 脏读、不可重复读示例:

#session Amysql> set session transaction isolation level read uncommitted;   #设置隔离级别为未提交读Query OK, 0 rows affected (0.00 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from inno_tbl where id=2;+----+------+| id | name |+----+------+|  2 | John |+----+------+1 row in set (0.00 sec)
#session Bmysql> select @@tx_isolation;+-----------------+| @@tx_isolation  |+-----------------+| REPEATABLE-READ |+-----------------+1 row in set (0.00 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> update inno_tbl set name='Jack Ma' where id=2;Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0
#session Amysql> select * from inno_tbl where id=2;+----+---------+| id | name    |+----+---------+|  2 | Jack Ma |+----+---------+1 row in set (0.00 sec)

此时session A读取到了session B修改但未提交的数据,若此时session B回滚,则A读取到的数据便是无效的,这便是"脏数据",由于A第一次读取到的数据与第二次读取到的数据不同,这便是"不可重复读";同理,或在B中插入新数据,A中此事务中也会读取的新的数据行,这便是幻读。

同样的流程,将A的隔离级别改为read committed,则不会产生"脏读",但同样会产生"不可重复读"和"幻读"

默认隔离级别REPEATABLE-READ下:

#session Amysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from inno_tbl where id=2;+----+--------------+| id | name         |+----+--------------+|  2 | John         |+----+--------------+1 row in set (0.00 sec)
#session Bmysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> update inno_tbl set name='Lucy' where id=2; Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> commit;Query OK, 0 rows affected (0.03 sec)
#session Amysql> select * from inno_tbl where id=2;+----+--------------+| id | name         |+----+--------------+|  2 | John         |+----+--------------+1 row in set (0.00 sec)#注意,此时没有产生"不可重复读"问题,但若是为查询加上共享锁:mysql> select * from inno_tbl1 where id=2 lock in share mode;+----+---------+| id | name    |+----+---------+|  2 | Lucy    |+----+---------+1 row in set (0.00 sec)

说明:

会话A中的事务读取到id为2的inno_tbl表中的name字段为John,而如果此时会话B中的事务将inno_tbl中id为2的name改为Lucy并提交,若些时A中的事务再读取此行数据时,会发现,如果直接使用select方式查询,读出的数据依然是旧的数据,而加上共享锁,会读出真正的数据。

Why?因为在innodb引擎中,mysql的增删改查语句可以分为两种:一种是快照读,一种是当前读。只有普通的查询语句为快照读,而剩余的增删改和加上lock in share mode共享锁或加上for update排它锁的查询语句,都属于当前读;当时读读取的是最新的数据,而快照读读取的不一定是最新的数据。

由此可推出:当在session A中以条件为name=John来更新或删除时,肯定不会更新或删除成功,如下所示:

mysql> update inno_tbl set name='张三' where name='John';Query OK, 0 rows affected (0.00 sec)Rows matched: 0  Changed: 0  Warnings: 0mysql> delete from inno_tbl where name='John';Query OK, 0 rows affected (0.00 sec)

如果把隔离级别改成Read Commited, 则A会话中的查询语句不用加lock in share mode 或for update便可查询出B会话中已经更改提交的最新内容. 这种情况叫做不可重复读。写到这里, 我有个小疑问, 是不是不可重复读和幻读是不是互相矛盾呢? 答:不是, 不可重复读主要针对修改, 幻读主要针对插入和删除。

以上是"Mysql Innodb事务隔离级别指的是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 级别 隔离 事务 查询 语句 问题 内容 快照 篇文章 更新 不同 普通 最高 一致 成功 矛盾 一致性 不怎么 不用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 为想互联网科技怎么样 喔噻互联网科技 善班互联网科技 奇酷互联网络科技 互联网科技视频 上游互联网科技 滨湖区互联网智能科技产品供应 恒生科技互联网指数分析 蓝色互联网科技 玖二柒互联网科技公司待遇 互联网和黑科技的看法 广州市恰铎互联网科技有限公司 青海科技产业互联网发展 科技互联网的核心竞争力 沐思想互联网科技有限公司 世界互联网科技成果奖 安徽零酒互联网科技有限公司 恒生科技指数 中概互联网 杭州科技互联网公司有哪些 六子台科技互联网展会 互联网与新科技 人人互联网科技是培训 互联网科技有限公司 翻译 滨湖区互联网智能科技产品供应 崇明区互联网教育科技售后服务 广西互联网科技孵化中心 互联网科技创新的路径 南京一网一红互联网科技有限公司 陕西九四连强互联网科技有限公司 互联网的科技体现在哪里
0