MySQL 默认开启事务自动提交模式,即除非显式的开启事务(BEGIN 或 START TRANSACTION),否则每条 SOL 语句都会被当做一个单独的事务自动执行。但有些情况下,我们需要关闭事务自动提交来保证数据的一致性。下面主要介绍如何设置事务自动提交模式。

在 MySQL 中,可以通过  SHOW VARIABLES 语句查看当前事务自动提交模式,如下所示:

mysql> SHOW VARIABLES LIKE 'autocommit';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit | ON |

+---------------+-------+

1 row in set, 1 warning (0.04 sec)

结果显示,autocommit 的值是 ON,表示系统开启自动提交模式。

在 MySQL 中,可以使用 SET autocommit 语句设置事务的自动提交模式,语法格式如下:

SET autocommit = 0|1|ON|OFF;

对取值的说明:

值为 0 和值为 OFF:关闭事务自动提交。如果关闭自动提交,用户将会一直处于某个事务中,只有提交或回滚后才会结束当前事务,重新开始一个新事务。

值为 1 和值为 ON:开启事务自动提交。如果开启自动提交,则每执行一条 SQL 语句,事务都会提交一次。

示例

下面我们关闭事务自动提交,模拟银行转账。

使用 SET autocommit 语句关闭事务自动提交,且张三转给李四 500 元,SQL 语句和运行结果如下:

mysql> SET autocommit = 0; ;

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM mybank.bank;

+--------------+--------------+

| customerName | currentMoney |

+--------------+--------------+

| 张三 | 1000.00 |

| 李四 | 1.00 |

+--------------+--------------+

2 rows in set (0.00 sec)

mysql> UPDATE bank SET currentMoney = currentMoney-500 WHERE customerName='张三' ;

Query OK, 1 row affected (0.02 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE bank SET currentMoney = currentMoney+500 WHERE customerName='李四';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

这时重新打开一个 cmd 窗口,查看 bank 数据表中张三和李四的余额,SQL 语句和运行结果如下所示:

mysql> SELECT * FROM mybank.bank;

+--------------+--------------+

| customerName | currentMoney |

+--------------+--------------+

| 张三 | 1000.00 |

| 李四 | 1.00 |

+--------------+--------------+

2 rows in set (0.00 sec)

结果显示,张三和李四的余额是事务执行前的数据。

下面在之前的窗口中使用 COMMIT 语句提交事务,并查询 bank 数据表的数据,如下所示:

mysql> COMMIT;

Query OK, 0 rows affected (0.07 sec)

mysql> SELECT * FROM mybank.bank;

+--------------+--------------+

| customerName | currentMoney |

+--------------+--------------+

| 张三 | 500.00 |

| 李四 | 501.00 |

+--------------+--------------+

2 rows in set (0.00 sec)

结果显示,bank 数据表的数据更新成功。

在本例中,关闭自动提交后,该位置会作为一个事务起点,直到执行 COMMIT 语句和 ROLLBACK 语句后,该事务才结束。结束之后,这就是下一个事务的起点。

关闭自动提交功能后,只用当执行 COMMIT 命令后,MySQL 才将数据表中的资料提交到数据库中。如果执行 ROLLBACK 命令,数据将会被回滚。如果不提交事务,而终止 MySQL 会话,数据库将会自动执行回滚操作。

使用 BEGIN 或 START TRANSACTION 开启一个事务之后,自动提交将保持禁用状态,直到使用 COMMIT 或 ROLLBACK 结束事务。之后,自动提交模式会恢复到之前的状态,即如果 BEGIN 前 autocommit = 1,则完成本次事务后 autocommit 还是 1。如果 BEGIN 前 autocommit = 0,则完成本次事务后 autocommit 还是 0。

mysql不自动提交更改语句_MySQL设置事务自动提交(开启和关闭)相关推荐

  1. 4、MySQL设置事务自动提交(开启和关闭)

    MySQL 默认开启事务自动提交模式,即除非显式的开启事务(BEGIN 或 START TRANSACTION),否则每条 SOL 语句都会被当做一个单独的事务自动执行.但有些情况下,我们需要关闭事务 ...

  2. MyBatis中设置事务自动提交

    MyBatis中设置事务自动提交 MyBatis框架是对JDBC的封装,MyBatis中的事务控制方式其本质也是JDBC的setAutoCommit()方法来设置事务提交的方式的. 1.MyBatis ...

  3. mysql自动提交 dcl语句_MySQL基础:DCL语句总结

    SQL语言大致分为DCL.DDL.DML三种,本文主要介绍MySQL 5.7版本DCL语句. 概述 DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可 ...

  4. mysql直连1.执行语句_MySQL随笔01_一条SQL语句是如何执行的

    一.MySQL基础架构示意图 二.MySQL分层 总体来讲,MySQL可以分为二层:Server层 和 存储引擎 两部分,如下图所示. 不同的存储引擎共用一个Server层. 三.各部分组件概述 连接 ...

  5. mysql 事务实例_mysql实现事务的提交和回滚实例

    mysql创建存储过程的官方语法为: 复制代码 代码如下:START TRANSACTION | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] R ...

  6. mysql 主键自增语句_MySQL 自增主键

    以下仅考虑 InnoDB 存储引擎. 自增主键有两个性质需要考虑: 单调性 每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除. 连续性 插入成功时,其数据的 ID ...

  7. mysql 怎么查询慢sql语句_Mysql中 查询慢的 Sql语句的记录查找

    Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...

  8. mysql创建函数执行sql语句_MySQL mysql_query 函数执行SQL语句

    mysql_query()函数 PHP MySQL 函数库中,mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句. 对于没有数据返回结果集的 SQL ,如 UPDATE.DE ...

  9. workbench 手动提交事务_mysql实现事务的提交和回滚实例

    mysql创建存储过程的官方语法为: START TRANSACTION | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] RO ...

最新文章

  1. 安装mysql5.7出现问题_转载---安装mysql5.7,遇到的问题
  2. 安检x光机原理计算机实现,安检x光机成像原理介绍
  3. Rancher搭建集群
  4. Django 序列化三种方式 对象 列表 元组
  5. Django return
  6. .NET连接SAP系统专题:C#获取RFC中自定义的异常(四)
  7. seqlist插入java_大话数据结构(五)(java程序)——顺序存储结构的插入与删除...
  8. iOS开发中防止键盘挡住UITextField解决方案
  9. oracle 用户表、字段信息
  10. :传递给 left 或 substring 函数的长度参数无效。_Excel中LEFT函数和RIGHT函数的用法。...
  11. 维基百科 双线性插值
  12. Palabos源码:computeEquilibrium(iPop, rhoBar, j, jSqr)的过程
  13. vba九九乘法表代码_VBA程序控制结构示例-九九乘法表
  14. 小学计算机课程听课记录,小学信息技术听课评课稿
  15. java限制ip登陆次数_手把手教你自定义IP访问次数限制器
  16. 【C语言题解】将数字金额翻译成中文大写金额
  17. 【ICPC】2019徐州 H Yuuki and a problem | 树套树、思维
  18. Spoon Kettle 输入之获取文件名(Get file names)
  19. OS-机械硬盘的磁盘初始化
  20. APP架构构思基本思路初稿

热门文章

  1. UltraEdit中的特殊字符
  2. Misc做题总结(做题一时爽)
  3. 读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)
  4. 个人站长三次网站备案的经历及经验总结
  5. 【给人一种自信、暖暖的感觉】
  6. 虽迟但到,我的2022年终总结
  7. AppleID共享、应用软件仓库、安卓软件仓库
  8. django fileup-load
  9. kindeditor php 漏洞,Kindeditor特定情况可能会导致全盘浏览 - 网站安全
  10. 数据矩阵及R语言的表示