MySQL 中的事务控制机制

1. 自动提交

默认情况下,MySQL 是自动提交(autocommit)的。也就意味着:如果不是显式地开始一个事务,每个查询都会被当做一个事务执行 commit。这是和 Oracle 的事务管理明显不同的地方,如果应用是从Oracle 数据库迁移至 mysql数据库,则需要确保应用中是否对事务进行了明确的管理

在当前连接中,可以通过设置 autocommit 来修改自动提交模式:

mysql> show variables like 'autocommit';
+---------------+-------+| Variable_name | Value |
+---------------+-------+| autocommit    | ON    |
+---------------+-------+1 row in set (0.00 sec)

mysql> set autocommit = 1;
Query OK, 0 rows affected (0.00 sec)-- 1或ON表示启用自动提交模式,0或OFF表示禁用自动提交模式

复制

如果设置了autocommit=0,当前连接所有事务都需要通过明确的命令来提交或回滚。

对于 MyISAM 这种非事务型的表,修改 autocommit 不会有任何影响,因为非事务型的表,没有 commit或 rollback 的概念,它会一直处于 autocommit 启用的状态。

有些命令,在执行之前会强制执行 commit 提交当前连接的事务。比如 DDL 中的 alter table,以及lock tables 等语句。

2. 隔离级别调整

默认情况下,MySQL 的隔离级别是可重复读(repeatable read)。MySQL 可以通过 set transaction_isolation 命令来调整隔离级别,新的隔离级别会在下一个事务开始时生效。

调整隔离级别的方法有两种:

  • 临时:在 MySQL 中直接用命令行执行:
ysql> show variables like 'transaction_isolation';
+-----------------------+-----------------+| Variable_name         | Value           |
+-----------------------+-----------------+| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+1 row in set (0.00 sec)mysql> SET transaction_isolation = 'REPEATABLE-READ';Query OK, 0 rows affected (0.00 sec)

复制

  • 永久:将以下两个参数添加至配置文件 my.cnf,并重启 MySQL: transaction_isolation = 'REPEATABLE-READ'

临时:在 MySQL 中直接用命令行执行:

mysql> show variables like 'transaction_isolation';
+-----------------------+-----------------+| Variable_name         | Value           |
+-----------------------+-----------------+| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+1 row in set (0.00 sec)

mysql> SET transaction_isolation = 'REPEATABLE-READ';
Query OK, 0 rows affected (0.00 sec)

复制

永久:将以下两个参数添加至配置文件 my.cnf,并重启 MySQL:

transaction_isolation = 'REPEATABLE-READ'

复制

3. 事务中使用不同的存储引擎

MySQL 的服务层并不负责事务的处理,事务都是由存储引擎层实现。

在同一事务中,使用多种存储引擎是不可靠的,尤其在事务中混合使用了事务型和非事务型的表。如同一事务中,使用了 InnoDB 和 MyISAM 表:

  • 如果事务正常提交,不会有什么问题;
  • 如果事务遇到异常需要回滚,非事务型的表就无法撤销表更,这就会直接导致数据处于不一致的状态。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栾还是恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值