Mysql有两种事务提交方式:
1:自动提交(默认)
MySQL 在自动提交模式下,每个 SQL 语句都是一个独立的事务。这意味着,
当您执行一个用于更新(修改)表的语句之后,MySQL立刻把更新存储到磁盘中。
2:手动提交(commit)
手动设置set @@autocommit = 0,即设定为非自动提交模式,只对当前的mysql命令行窗口有效,打开一个新的窗口后, 默认还是自动提交。 使用 MySQL 客户端执行 SQL 命令后必须使用commit命令执行事务,否则所执行的 SQL 命令无效, 如果想撤销事务则使用 rollback 命令(在commit之前)。

查看 MySQL 客户端的事务提交方式命令:(默认值=1,自动提交)

select @@autocommit; 

修改 MySQL 客户端的事务提交方式为手动提交命令:

set @@autocommit = 0;

MySQL的自动提交功能

在MySQL中执行命令时,通常都直接被确定提交了。也就是说用户不用意识此事,所有的命令都会被自动COMMIT。

特别是当存储引擎为MyISAM的情况下,本身它是不支持事务处理的,只要执行了命令,所有的命令部会被提交。

默认提交方式就被称为自动(隐式)提交

隐式提交默认被置为ON的状态,阻止你在此事务范围内回滚任何其他更改(因为事务已经给提交了无法回滚)


如果存储引擎为InnoDB (Default)时,该引擎支持事务处理

禁用自动提交
方式一

当MySQL开启事务处理, 即执行了START TRANSACTIONBEGIN命令(-删除后回滚)后,

所有的 DML(INSERT | UPDATE | DELETE) 语句都需显示执行COMMIT命令(autocommit=OFF情况下)后才会被提交,

即执行完DML语句之后,执行 COMMIT之前,都可以利用 ROLLBACK进行事务回滚

而其他的诸如 DDL(CREATE | DORP | ALTER|)语句的,都是隐式提交的。

例如 :
CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交。

p.s. 方式一要注意,一次commit或一次rollback表示最近一个begin到此次commit或rollback之间的操作都将提交或回滚,这之后的操作都必须重新设置begin,否则还会继续使用autocommit=ON的策略。

方式二

1、登录mysql数据库
2、set autocommit=‘false’;
3、查看是否禁用自动提交: show variables like “autocommit”; (如果是OFF表示禁用成功)
4、执行一段insert / update / delete语句,检查数据无错误之后再执行commit;这样,这段时间内的所有操作都将提交到数据库中,如果发现执行了不正确的insert / update / delete语句,则使用rollback,此时将会回滚到上一个commit之后数据库的状态。


MySQL中set autocommit=0与start transaction区别

set autocommit=0,

当前session禁用自动提交事物,自此句执行以后,
每个DDL语句或者语句块所在的事务都需要显示"commit"才能提交事务。

start transaction

指的是启动一个新事务。

在默认的情况下,MySQL从自动提交(autocommit)模式运行,这种模式会在每条语句执行完毕后把它作出的修改立刻提交给数据库并使之永久化。事实上,这相当于把每一条语句都隐含地当做一个事务来执行。如果你想明确地执行事务,需要禁用自动提交模式并告诉MySQL你想让它在何时提交或回滚有关的修改。

执行事务的常用办法是发出一条START TRANSACTION(或BEGIN)语句挂起自动提交模式,然后执行构成本次事务的各条语句,最后用一条 COMMIT语句结束事务并把它们作出的修改永久性地记入数据库。万一在事务过程中发生错误,用一条ROLLBACK语句撤销事务并把数据库恢复到事务开 始之前的状态。

START TRANSACTION语句"挂起"自动提交模式的含义是:在事务被提交或回滚之后,该模式将恢复到开始本次事务的 START TRANSACTION语句被执行之前的状态。(如果自动提交模式原来是激活的,结束事务将让你回到自动提交模式;如果它原来是禁用的,结束 当前事务将开始下一个事务。)

如果是autocommit模式 ,autocommit的值应该为 1 ,不autocommit 的值是 0 ;

请在操作前确定autocommit 的模式是否开启

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐