zoukankan      html  css  js  c++  java
  • 关于mysql 的 autoCommit 参数

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

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

    查看 这个 自动提交状态。

      SELECT @@autocommit;

    零时修改这个素心

      set @@autocimmit = 1;

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

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

     需要这么写:

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

     

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

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

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

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

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

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

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

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

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

      数据库 提交有 2 中方式:

        1 单行提交,

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

    不写  @Transactional 就是 单行提交。

  • 相关阅读:
    zabbix 微信告警
    mongodb 的数据备份与还原
    Templates
    Rsyslog 基本结构
    matplotlib绘图学习
    pyhon 简介
    Pygame (Python编程从入门到实践)
    AttributeError: 'pygame.Surface' object has no attribute 'rect'
    PYTHON CLIENT API
    SALT.STATES.CMD模块
  • 原文地址:https://www.cnblogs.com/cxygg/p/10695675.html
Copyright © 2011-2022 走看看