mysql数据库事物隔离四种级别是什么

发布时间:2022-05-27 16:06:57 作者:iii
来源:亿速云 阅读:167

本篇内容介绍了“mysql数据库事物隔离四种级别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

数据库事物隔离级别有四种,按照隔离性,由低到高依次是:

  1. Read Uncommitted

  2. Read Committed

  3. Repeatable Read

  4. Serializable

按照并发性则顺序相反。

√: 可能出现 ×: 不会出现


脏读不可重复读幻读
Read uncommitted(未提交读)
Read committed(已提交读)×
Repeatable read(可重复读)××
Serializable(可串行化)×××

1.Read uncommitted

读未提交,即在SQL查询中,读取了未提交的数据。在mysql中,默认的事物级别是Repeatable read;默认自动提交模式是打开的,现做如下修改如下所示,

(1)关闭自动提交
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.01 sec)
(2)修改事物级别为Read uncommitted
mysql> show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
 mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 Query OK, 0 rows affected (0.00 sec)

 mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
 Query OK, 0 rows affected (0.00 sec)

当前打开了两个session,在第一个,往表test中插入了一行数据,但是还没有提交,此时通过第二个session可以查询到该条数据。

mysql数据库事物隔离四种级别是什么

且当第一个session中的事物rollback之后,第二个session又查询不到新插入的数据‘3’

mysql数据库事物隔离四种级别是什么

2.Read Committed

读提交,修改事物几倍为Read Committed

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.00 sec)

此时,在session0中插入了一条数据且未commit,在session1中无法查询到

mysql数据库事物隔离四种级别是什么

等session0在commit之后,session1可以正常的查询到数据

mysql数据库事物隔离四种级别是什么

3.Repeatable read

可重复读,此时修改事物级别为可重复读

mysql> SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)

此时,test表中存在两笔数据:2和4,如下所示

mysql> select * from test where col1 <'5';
+------+
| col1 |
+------+
| 2    |
| 4    |
+------+
2 rows in set (0.00 sec)

此时步骤如下:1.在session0中begin一个事物;2.在session1中插入一条数据(5),并commit; 3.在session0中查询,发现查询不到在session1中插入的数据

mysql数据库事物隔离四种级别是什么

接下来,再做如下操作:1.在session0中commit; 2.在session0中再做查询操作,发现之前在session1中insert的5又可以查询到

mysql数据库事物隔离四种级别是什么

4.Serializable

可串行话,是最高的隔离级别,即在读取的每一行数据上会加锁,事物顺序执行。所以会出现锁超时等问题,在实际业务中很少使用。

“mysql数据库事物隔离四种级别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. Mysql中事物及隔离级别
  2. mysql数据库事物的4个隔离级别概况

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:python控制语句的两大分类是什么

下一篇:python编写程序的常见错误是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》