共计 2250 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章主要介绍 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 中隔离级别的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!