当前位置:首页 > 编程技术 > 正文内容

MySQL 中的事务控制机制

yc8884周前 (02-26)编程技术34

MySQL 中的事务控制机制

事务控制是 MySQL 的重要特性之一。在 MySQL 中,InnoDB 和 NDB Cluster 是常见的事务型存储引擎。

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 中直接用命令行执行:

    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'

临时:在 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 表:

  • 如果事务正常提交,不会有什么问题;

  • 如果事务遇到异常需要回滚,非事务型的表就无法撤销表更,这就会直接导致数据处于不一致的状态。

4. 小结

本小节主要介绍了 MySQL 中事务控制的一些特点,如何调整自动提交(autocommit)、如何调整隔离级别调整、以及讲解了在事务中使用混合存储引擎的缺点。


站长百科网
标签: mysql

“MySQL 中的事务控制机制” 的相关文章

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何...

【说站】Java从resources读取文件内容的方法有哪些

【说站】Java从resources读取文件内容的方法有哪些

本文主要介绍的是java读取resource目录下文件的方法,比如这是你的src目录的结构├── main│ ├── java│ │ └── ...