这篇文章主要介绍MySQL中隔离级别的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
 
MySQL入门--事务隔离级别
 
1) 隔离级别介绍
 
如果一个客户机的事务更改了数据,其他客户机的事务是应发现这些更改还是应与其隔离,事务隔离级别可以确定同时进行的事务在访问相同数据时彼此交互的方式。使用存储引擎可实现隔离级别。隔离级别选项在不同的数据库服务器之间是不一样的,因此, InnoDB 所实现的级别可能与其他数据库系统所实现的级别并不完全对应。InnoDB 可实现四种隔离级别,用于控制事务所做的更改在多大程度上可由其他同时进行的事务注意到。四种隔离级别如下:
 
l  READ UNCOMMITTED:允许事务查看其他事务所进行的未提交更改;允许发生“脏” 读、不可重复读和虚读。
 
l  READ COMMITTED:允许事务查看其他事务所进行的已提交更改;允许发生不可重复读和虚读。未提交的更改仍不可见。
 
l  REPEATABLE READ:确保每个事务的 SELECT 输出一致,InnoDB 的默认级别;无论其他事务所做的更改是否已提交,两次都会获得相同的结果。换句话说,也就是不同的事务会对相同的数据产生一致的结果。
 
l  SERIALIZABLE:将一个事务的结果与其他事务完全隔离;与 REPEATABLE READ 类似,但其限制性更强,即一个事务所选的行不能由其他事务更改,直到第一个事务完成为止。
 
2) 设置隔离级别
 
系统默认事务级别为:repeatable-read
 
方法一、 服务器启动时设置级别。
 
–  在mysqld 命令中使用--transaction-isolation选项。
 
–  在配置文件中设置transaction-isolation:
 
[mysqld]
 
transaction-isolation = <isolation_level>
 
在选项文件中或在命令行上将<isolation_level> 值设置为:
 
l  READ-UNCOMMITTED
 
l  READ-COMMITTED
 
l  REPEATABLE-READ
 
l  SERIALIZABLE
 
方法二、使用SET TRANSACTION ISOLATION LEVEL 语句为正在运行的服务器设置。
 
– 语法示例:
 
SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level>;
 
SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level>;
 
SET TRANSACTION ISOLATION LEVEL <isolation_level>;
 
对于SET TRANSACTION ISOLATION LEVEL 语句,将<isolation_level> 值设置为:
 
l  READ UNCOMMITTED
 
l  READ COMMITTED
 
l  REPEATABLE READ
 
l  SERIALIZABLE。
 
此事务级别可以全局设置,也可以按会话设置。如果没有显式指定,则事务隔离级别将按会话进行设置。例如,以下语句会将当前mysql 会话的隔离级别设置为READ COMITTED:
 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
该语句相当于:
 
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
要设置所有后续mysql 连接的默认级别,请使用GLOBAL 关键字,而不是SESSION:
 
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
 
注:设置的全局默认事务隔离级别适用于从设置时起所有新建立的客户机连接。现有连接不受影响。
 
方法三、SET GLOBAL TX_ISOLATION
 
         需要 SUPER 权限
 
Mysql>set global tx_isolation=’ READ-COMMITTED’
 
         Mysql>select @@tx_isolation;
 
         Mysql>show variables like ‘tx_isolation’;
 
transaction_isolation MySQL 5.7.20引入,目的是替换即将弃用的tx_isolation(MySQL 8.0);
 
 (root@localhost) [information_schema]> show variables like '%isolat%';
 
+-----------------------+-----------------+
 
| Variable_name         | Value           |
 
+-----------------------+-----------------+
 
| transaction_isolation | REPEATABLE-READ |
 
| tx_isolation          | REPEATABLE-READ |
 
+-----------------------+-----------------+
 
transaction_isolation was added in MySQL 5.7.20 as an alias for tx_isolation, which is now deprecated and is removed in MySQL 8.0. Applications should be adjusted to use transaction_isolation in preference to tx_isolation.
 
以上是“MySQL中隔离级别的示例分析”这篇文章的所有内容,感谢各位的阅读!

dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。