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

9次阅读

mysql支持设置事务隔离级别以控制并发行为,常用级别包括读未提交、读已提交、可重复读和串行化;可通过select @@global.transaction_isolation和SELECT @@session.transaction_isolation查看当前级别;使用SET GLOBAL transaction_isolation = ‘LEVEL’设置全局级别,影响新会话;使用SET SESSION transaction_isolation = ‘LEVEL’设置当前会话级别;也可在事务前用SET TRANSACTION ISOLATION LEVEL LEVEL指定下一个事务的隔离级别,需在START TRANSACTION前执行;MySQL默认为REPEATABLE READ,生产环境推荐使用REPEATABLE READ或READ COMMITTED以平衡一致性与性能。

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

在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';

支持的值包括:

  • READ-UNCOMMITTED – 可以读到未提交的数据变更
  • READ-COMMITTED – 只能读到已提交的数据
  • REPEATABLE-READ – MySQL默认级别,确保在同一事务中多次读取同一数据结果一致
  • SERIALIZABLE – 完全串行化事务执行,避免幻读

设置会话事务隔离级别

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

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,避免不必要的锁竞争。

text=ZqhQzanResources