贝利信息

如何在mysql中设置事务隔离级别_mysql事务隔离配置

日期:2026-01-18 00:00 / 作者:P粉602998670
MySQL支持设置事务隔离级别以控制并发行为,常用级别包括读未提交、读已提交、可重复读和串行化;可通过SELECT @@global.transaction_isolation和SELECT @@session.transaction_isolation查看当前级别;使用SET GLOBAL transaction_isolation = 'LEVEL'设置全局级别,影响新会话;使用SET SESSION transaction_isolation = 'LEVEL'设置当前会话级别;也可在事务前用SET TRANSACTION IS

OLATION LEVEL LEVEL指定下一个事务的隔离级别,需在START TRANSACTION前执行;MySQL默认为REPEATABLE READ,生产环境推荐使用REPEATABLE READ或READ COMMITTED以平衡一致性与性能。

在MySQL中设置事务隔离级别,可以通过全局或会话级别进行配置。不同的隔离级别可以控制并发事务之间的可见性和影响,避免脏读、不可重复读和幻读等问题。常用的隔离级别有:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。

查看当前事务隔离级别

要确认当前的隔离级别,可以使用以下命令:

SELECT @@global.transaction_isolation;  -- 查看全局隔离级别
SELECT @@session.transaction_isolation; -- 查看当前会话隔离级别
-- 或者在旧版本中使用:
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;

设置全局事务隔离级别

全局设置会影响所有后续新建立的会话,不会影响当前已存在的会话。

SET GLOBAL transaction_isolation = 'READ-COMMITTED';

也可以使用等价写法:

SET GLOBAL tx_isolation = 'READ-COMMITTED';

支持的值包括:

设置会话事务隔离级别

仅对当前会话有效,不影响其他连接。

SET SESSION transaction_isolation = 'READ-COMMITTED';

例如,在当前会话中临时改为读已提交模式:

SET SESSION transaction_isolation = 'READ-COMMITTED';
START TRANSACTION;
-- 执行查询或更新操作
COMMIT;

在事务中动态设置隔离级别

可以在开启事务前指定其隔离级别:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
-- 后续操作将使用指定的隔离级别

注意:这条语句必须在START TRANSACTION之前执行,并且只对下一个事务生效(除非再次设置)。

基本上就这些。根据应用的并发需求选择合适的隔离级别,权衡一致性与性能。生产环境推荐使用REPEATABLE READREAD COMMITTED,避免不必要的锁竞争。