mysql autocommit_关于mysql 的 autoCommit 参数

首先描述一下这个参数的作用。

这个参数 默认是开启的。 开启以后再命令敲的sql 会自动提交。如果关闭,就必须手动 commit。

查看 这个 自动提交状态。

SELECT @@autocommit;

c84662bc9840ee6b4367b759f3c613e1.png

零时修改这个素心

set @@autocimmit = 1;

ec316841561157bff755d0baa0d0fa1e.png

全局修改:可以改 mysql.cnf(linux ) 或者 mysql.ini(window) 文件

994b87d8a93077265658d16c008b1489.png

修改 以后 直接在命令行 写sql  无效了

4440d51aa35e1b27831d7ab40de2b3b4.png

需要这么写:

d1d5c40c9063d0ddeb4f727dadd3e822.png

开启以后,会强制要求 提交

eb15acc5513fbabb868e7754eabe0564.png

在事物环境中 提交一次,能提高执行效率。但是 这样写 不管在开没开启自动提交效率都 一样,比单条提交效率高。只是 关闭后单条 提交被禁用,或者说因为没有个每一条 sql  一个事物环境,所以不允许执行 没有手动提交的 单条sql。

30a3c6774208d00be690b8e2d2b1527b.png

结论:autocimmit = 0 ,不允许自动提交,不会在命令行 执行的每一条 sql 的同时,commit 一次。这样就强制 命令行 写入数据必须开启 一个 事物,然后执行 sql  以后 手动 提交。从而避免了命令行 方式的 大量 单条sql 执行 慢 的问题。

备注:自动提交的 批量单条sql 执行,这时候每一个sql 是独立提交的。所以 异常不能 ,也不会 全部回滚。

然后在说说   spring  里面男的 autocimmit = 0 对 spring 事物的影响。

首先,spring 默认会设置当前连接 autocimmit =1.

如图:在mysql  全局 关闭 自动提交的 情况下,获取spring的 自动提交。是true;

368d757d74ac446313ed8edbcadc4c3c.png

这也是为什么 数据库关闭自动提交 后 spring 没有写 @Transactional 的方法里面的 修改语句 也会被提交。

如果 数据库的 autocimmit =0 ,并且管理spring里面默认修改的 自动提交(dmg.getDataSource().getConnection().setAutoCommit(false);  ),那么 sql 就不会自动提交了。这时候 插入语句无效。

关于 spring 没有写  @Transactional 的解释:

数据库 提交有 2 中方式:

1 单行提交,

2 提交同一个事物的多行代码

不写  @Transactional 就是 单行提交。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值