• 关于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 就是 单行提交。

  • 相关阅读:
    我在D2讲演的视频,已经可以下载了~
    走出海量数据及访问量压力困境
    博客作者应该学习的15个国外博客
    如何将jsp动态网页转换成静态页面
    新一代网络模式Web 2.0火爆发展
    数据库设计中的14个关键技巧
    如何进行RSS推广
    运用RUP 4+1视图方法进行软件架构设计
    02java关键词变量类型
    03java运算符函数
  • 原文地址:https://www.cnblogs.com/cxygg/p/10695675.html
Copyright © 2020-2023  润新知