iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 事务autocommit自动提交操作
  • 321
分享到

MySQL 事务autocommit自动提交操作

MySQL事务autocommit自动提交 2022-05-17 01:05:30 321人浏览 八月长安
摘要

Mysql默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模

Mysql默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模式。

通过以下命令可以查看当前autocommit模式


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

从查询结果中,我们发现Value的值是ON,表示autocommit开启。我们可以通过以下sql语句改变这个模式


mysql> set autocommit = 0;

值0和OFF都是一样的,当然,1也就表示ON。通过以上设置autocommit=0,则用户将一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务重新开始一个新的事务。

举个例子,张三给李四转账500元。那么在数据库中应该是以下操作:

1,先查询张三的账户余额是否足够

2,张三的账户上减去500元

3,李四的账户上加上500元

以上三个步骤就可以放在一个事务中执行提交,要么全部执行要么全部不执行,如果一切都OK就commit提交永久性更改数据;如果出错则rollback回滚到更改前的状态。利用事务处理就不会出现张三的钱少了李四的账户却没有增加500元或者张三的钱没有减去李四的账户却加了500元。

MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,所以改变autocommit没有什么作用。但不会报错,所以要使用事务处理的童鞋一定要确定你所操作的表示支持事务处理的,如InnoDB。如果不知道表的存储引擎可以通过查看建表语句查看建表的时候有没有指定事务类型的存储引擎,如果没有指定存储引擎默认则是MyISAM不支持事务的存储引擎。

当然,事务处理是为了保障表数据原子性、一致性、隔离性、持久性。

这些都是要消耗系统资源的,要谨慎选择。

补充:MySQL的事务处理(Transation)和自动执行(AutoCommit)与提交类型(Completion)

1、事务(transaction)

事务在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务主要用于处理操作量大,复杂度高的数据。如果你要删除一条主表信息,而主表有多个从表的时候,你需要有步骤地删除明细后再删除主表信息,这个过程极其容易出错,那么这个时候就是用事务才处理是最合适的了。

2、事务(Transcation)的用法

事务开始(start transaction or begin)

提交(commit)

回滚(rollback)

3、MYSQL支持的引擎(InnoDB)


show engines;

4、自动执行(AutoCommit)与提交类型(Completion)

使用事务有两种方式,分别为隐式事务和显式事务。隐式事务实际上就是自动提交,oracle 默认不自动提交,需要手写 COMMIT。在MySQL中,自动提交(autocommit)在支持事务(transaction)的引擎中,若autocommit=true,则不需要commit的情况下直接提交语句形成永久性修改,Mysql默认打开autocommit,也可以通过配置设置。


set autocommit=0;(AutoCommit Off)
set autocommit=1;(AutoCommit On)
set completion_type=0;(No Chain)
set completion_type=1;(Chain)
set completion_type=2;(Release)

也可以通过语句查询当前配置


show variables like '%autocommit%';
show variables like '%completion%';

5、验证例子


mysql> BEGIN;
 -> INSERT INTO test SELECT '关羽';
 -> COMMIT;
 -> BEGIN;
 -> INSERT INTO test SELECT '张飞';
 -> INSERT INTO test SELECT '张飞';
 -> ROLLBACK;
 -> SELECT * FROM test;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.03 sec)
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
ERROR 1062 (23000): Duplicate entry '张飞' for key 'PRIMARY'

mysql> select * from test;//

当前窗口结果:

新建窗口结果:

结论:由于test表中name的唯一性约束,看代码的话,两个"张飞"执行后(无论有无触发主键约束),实际由于第二个"张飞"触发了唯一性约束异常,所以我认为事务会跳出,所以在当前连接中,test表中可以看到一个张飞,实际上第二个事务,并没有提交成功。

接下来,我们试试正常提交的数据。


mysql> BEGIN;
 -> INSERT INTO test SELECT '关羽';
 -> COMMIT;
 -> BEGIN;
 -> INSERT INTO test SELECT '张飞';
 -> INSERT INTO test SELECT '刘备';
 -> ROLLBACK;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.04 sec)


mysql> select * from test;//

当前窗口结果:

新建窗口结果:

结论:对比这次的测试结果,所以我认为第一个测试,并没有执行rollback,而是跳出事务处理异常机制了。

因为mysql默认打开了autocommit,那么我想验证下在无显示事务的情况下(即无begin开头),两个"张飞"是如何自处的?


mysql> BEGIN;
 -> INSERT INTO test SELECT '关羽';
 -> COMMIT;
 -> INSERT INTO test SELECT '张飞';
 -> INSERT INTO test SELECT '张飞';
 -> ROLLBACK;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.05 sec)
Records: 1 Duplicates: 0 Warnings: 0

ERROR 1062 (23000): Duplicate entry '张飞' for key 'PRIMARY'
mysql> select *from test;//

当前窗口结果:

新建窗口结果:

结论:其实看执行结果就知道了,第1个"张飞"作为单独的事务已经执行成功了,第二个"张飞"由于触发了主键约束所以执行失败了。除了显示事务外,有没有办法在没结束事务前(无Commit)前,可以让两个"张飞"合并成一个事务呢?

可以设置set completion_type=1;(chain),也就是说无论几个"张飞"在还没提交之前,都是一个事务。

代码与上面的一样。


mysql> SET @@completion_type = 1;
 -> BEGIN;
 -> INSERT INTO test SELECT '关羽';
 -> COMMIT;
 -> INSERT INTO test SELECT '张飞';
 -> INSERT INTO test SELECT '张飞';
 -> ROLLBACK;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
ERROR 1062 (23000): Duplicate entry '张飞' for key 'PRIMARY'

当前窗口结果:

新建窗口结果:

结论:因为我设置了set completion_type=1(chain),相当与在第一个"张飞"前加了begin,所以第二个"张飞"由于触发了主键约束所以导致事务失败,插入数据失败。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 事务autocommit自动提交操作

本文链接: https://www.lsjlt.com/news/10122.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库中的事务操作与自动提交机制
    MySQL数据库中的事务操作与自动提交机制 在数据库系统中,事务(transaction)是指一组数据库操作,这些操作要么全部成功执行,要么全部失败并回滚到事务开始前的状态。MySQL...
    99+
    2024-03-15
    mysql 事务 提交 sql语句
  • MySQL数据库中的事务操作与自动提交机制
    MySQL数据库中的事务操作与自动提交机制 在数据库系统中,事务(transaction)是指一组数据库操作,这些操作要么全部成功执行,要么全部失败并回滚到事务开始前的状态。MySQL...
    99+
    2024-03-15
    mysql 事务 提交 sql语句
  • MySQL事务处理:自动提交与手动提交的区别
    MySQL事务处理:自动提交与手动提交的区别 在MySQL数据库中,事务是一组SQL语句的集合,要么全部执行成功,要么全部执行失败,保证了数据的一致性和完整性。在MySQL中,事务可以...
    99+
    2024-04-02
  • MySQL中数据修改操作是否自动提交?
    MySQL中数据修改操作默认情况下是自动提交的,即每次执行UPDATE、INSERT、DELETE等修改数据的操作后,都会立即生效并提交到数据库中。这样做的好处是确保数据的一致...
    99+
    2024-03-15
    mysql 自动提交 数据修改
  • mysql怎么查看事务是否自动提交
    要查看MySQL的事务是否自动提交,可以使用以下查询语句: SHOW VARIABLES LIKE 'autocommit...
    99+
    2024-04-02
  • mysql是自动提交吗
    mysql是自动提交。关闭自动提交的方法:1、使用SET AUTOCOMMIT = 0;语句;2、使用COMMIT;语句;3、使用ROLLBACK;语句。本教程操作环境:windows10系统、mysql8.0.16版本、DELL G3电脑...
    99+
    2023-07-25
  • MySQL事务提交的流程
    本篇内容介绍了“MySQL事务提交的流程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • MySQL事务的提交过程
    本篇内容介绍了“MySQL事务的提交过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL事务提交过...
    99+
    2024-04-02
  • Mysql在全局禁用自动提交
    有一个参数init_connect可以实现这个功能,这个参数用来定义每个session建立时自动执行的query,也就是初始化会话 根据这个参数,有3种方式禁用autocommit: 1. &nbs...
    99+
    2024-04-02
  • MySQL层事务提交的流程
    本篇内容主要讲解“MySQL层事务提交的流程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL层事务提交的流程”吧!本节将来解释一下MySQL层详细的提交...
    99+
    2024-04-02
  • 怎么理解sqlserver禁止management studio的自动提交事务
    这篇文章将为大家详细讲解有关怎么理解sqlserver禁止management studio的自动提交事务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自动...
    99+
    2024-04-02
  • 怎么解决navicat事务自动提交遇到的问题
    小编给大家分享一下怎么解决navicat事务自动提交遇到的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近在使用navic...
    99+
    2024-04-02
  • MySQL数据库自动提交机制解析
    MySQL数据库自动提交机制解析 MySQL是一种常用的开源关系型数据库管理系统,它采用了一种称为自动提交机制的方式来处理事务。在MySQL中,默认情况下自动提交机制是开启的,也就是每...
    99+
    2024-04-02
  • mysql查看是否自动提交的方法
    这篇文章主要介绍mysql查看是否自动提交的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql 查看是否自动提交的方法:查看autocommit状态,代码为【set aut...
    99+
    2024-04-02
  • 深入研究MySQL的自动提交功能
    标题:深入研究MySQL的自动提交功能 在使用MySQL数据库进行开发和管理时,自动提交功能是一个非常重要的特性。它决定了每一条SQL语句在执行后是否立即提交事务,对于事务的原子性和数...
    99+
    2024-03-15
    mysql 自动提交 深入研究 sql语句
  • bbed修改itl值,手动提交事务
    数据库的版本是11.2.0.4   欢迎大家加入ORACLE超级群:17115662 免费解决各种ORACLE问题,以后BLOG将迁移到h...
    99+
    2024-04-02
  • 找出未提交的MySQL线程/事务
    找出未提交的MySQL线程/事务:SELECT * from information_schema.processlist;   这个能看到上面哪个SQL线程ID(下图的378号线程就是造...
    99+
    2024-04-02
  • Mysql之事务提交和隔离级别
    Mysql之事务提交和隔离级别一、事务是什么事务简言之就是一组SQL执行要么全部成功,要么全部失败。MYSQL的事务在存储引擎层实现。1、事务都有ACID特性:原子性(Atomicity):一个事务必须被视...
    99+
    2024-04-02
  • mysql 5.5 lock tables与隐式事务提交commit
    结论:lock tables可以隐式提交其它会话的未提交事务 测试明细: ----session 1 mysql> start transaction; Query OK, 0 rows affec...
    99+
    2024-04-02
  • 怎么理解MySQL事务两段式提交
    本篇内容主要讲解“怎么理解MySQL事务两段式提交”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解MySQL事务两段式提交”吧!⒈两段式提交的目的:解决参...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作