1 MySQL的autocommit设置

MySQL默认是开启自动提交的,即每一条DML(增删改)语句都会被作为一个单独的事务进行隐式提交。如果修改为关闭状态,则执行DML语句之后要手动提交 才能生效。
查询当前会话的自动提交是否开启:

mysql> show variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit  | ON  |+---------------+-------+
mysql> show global variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit  | ON  |+---------------+-------+
关闭当前会话的自动提交模式mysql> set autocommit=0; mysql> show variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit  | OFF  |+---------------+-------+ 全局的autocommit还是开启状态mysql> show global variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit  | ON  |+---------------+-------+  关闭全局的autocommitmysql> set global autocommit=0; mysql> show global variables like 'autocommit';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit  | OFF  |+---------------+-------+
[mysqld]...autocommit=0
//com.mysql.cj.protocol.a.NativeServerSession.java  private boolean autoCommit = true;
com.alibaba.druid.pool.DruidAbstractDataSource.java  protected volatile boolean             defaultAutoCommit             = true;  ...  public void initPhysicalConnection(Connection conn, Map<String, Object> variables, Map<String, Object> globalVariables) throws SQLException {    if (conn.getAutoCommit() != defaultAutoCommit) {      //将connection的autocommit设置为true      conn.setAutoCommit(defaultAutoCommit);    }    ...   }
com.zaxxer.hikari.HikariConfig.java  public HikariConfig()  {   ...   isAutoCommit = true;  }
@Overrideprotected void doBegin(Object transaction, TransactionDefinition definition) {DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;Connection con = null;try {      ........// Switch to manual commit if necessary. This is very expensive in some JDBC drivers,// so we don't want to do it unnecessarily (for example if we've explicitly// configured the connection pool to set it already).if (con.getAutoCommit()) {txObject.setMustRestoreAutoCommit(true);if (logger.isDebugEnabled()) {logger.debug("Switching JDBC Connection [" + con + "] to manual commit");}                //关闭自动提交模                con.setAutoCommit(false);}      .......}catch (Throwable ex) {     .......}}

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Linux下MYSQL 5.7 找回root密码的问题(亲测可用)
  3. MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
  4. Android(安卓)- Manifest 文件 详解
  5. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  6. Selector、shape详解(一)
  7. android2.2资源文件详解4--menu文件夹下的菜单定义
  8. android从服务器下载文件(php+apache+win7+MySql)
  9. Android发送短信方法实例详解

随机推荐

  1. C# 加密类工具实例分析
  2. .net中关于异步性能测试的示例代码
  3. C# ArrayListd的长度问题解决
  4. C#中关于ActiveMQ的应用详解
  5. 关于WebSocket部署服务器外网无法连接的
  6. C#使用AForge实现摄像头录像功能的案例
  7. .Net Core之实现下载文件的实例
  8. c#之浮点数计算问题的解决
  9. C#单例模式的实现以及性能对比的实例
  10. C#之FastSocket实战项目的示例分享