最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解MySQL與Spring的自動(dòng)提交(autocommit)

 更新時(shí)間:2021年01月13日 10:13:45   作者:矚目學(xué)碼  
這篇文章主要介紹了MySQL與Spring的自動(dòng)提交(autocommit)的的相關(guān)資料,幫助大家更好的理解和使用MySQL與spring,感興趣的朋友可以了解下

1 MySQL的autocommit設(shè)置

MySQL默認(rèn)是開啟自動(dòng)提交的,即每一條DML(增刪改)語句都會(huì)被作為一個(gè)單獨(dú)的事務(wù)進(jìn)行隱式提交。如果修改為關(guān)閉狀態(tài),則執(zhí)行DML語句之后要手動(dòng)提交 才能生效。
查詢當(dāng)前會(huì)話的自動(dòng)提交是否開啟:

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit  | ON  |
+---------------+-------+

查詢?nèi)值淖詣?dòng)提交是否開啟:

mysql> show global variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit  | ON  |
+---------------+-------+

通過修改autocommit變量可以關(guān)閉和開啟操作

關(guān)閉當(dāng)前會(huì)話的自動(dòng)提交模式
mysql> set autocommit=0;

 
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit  | OFF  |
+---------------+-------+

 全局的autocommit還是開啟狀態(tài)
mysql> show global variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit  | ON  |
+---------------+-------+

 
 關(guān)閉全局的autocommit
mysql> set global autocommit=0;

 
mysql> show global variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit  | OFF  |
+---------------+-------+

如果想要MySQL服務(wù)重啟之后仍能生效,需要設(shè)置系統(tǒng)環(huán)境變量。MySQL5.7 在cnf配置文件中[mysqld]下面設(shè)置autocommit的值。

[mysqld]
...
autocommit=0

Spring中對(duì)自動(dòng)提交的控制

MySQL的JDBC驅(qū)動(dòng)包 mysql-connector-java 會(huì)給會(huì)話的connection默認(rèn)開啟自動(dòng)提交,譬如 mysql-connector-java-8.0.22版本的代碼:

//com.mysql.cj.protocol.a.NativeServerSession.java
  private boolean autoCommit = true;

常用的數(shù)據(jù)庫(kù)連接池 如HikariCP,druid等,默認(rèn)也是開啟自動(dòng)提交,會(huì)將connection的自動(dòng)提交設(shè)置都改為true。
druid在初始化DataSource的時(shí)候設(shè)置connection的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設(shè)置為true
      conn.setAutoCommit(defaultAutoCommit);
    }
    ...
 
  }

HikariCP 初始化DataSource的默認(rèn)配置 中autocommit也是true:

com.zaxxer.hikari.HikariConfig.java
  public HikariConfig()
  {
   ...
   isAutoCommit = true;
  }

對(duì)于事務(wù)管理器PlatformTransactionManager管理的顯式事務(wù)(譬如@Transactional注解聲明)在 開啟事務(wù)時(shí)會(huì)關(guān)閉自動(dòng)提交模式。 代碼如下:

	@Override
	protected 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");
				}
                //關(guān)閉自動(dòng)提交模
                con.setAutoCommit(false);
			}

      		.......
		}

		catch (Throwable ex) {
     		.......
		}
	}

總結(jié)

MySQL的autocommit模式默認(rèn)是打開狀態(tài),為了防止手動(dòng)的DML操作導(dǎo)致失誤,生產(chǎn)環(huán)境可以設(shè)置為默認(rèn)關(guān)閉的狀態(tài)。一般的jdbc 連接池默認(rèn)都是開啟狀態(tài),而且是可配置的。顯式事務(wù)下會(huì)設(shè)置成關(guān)閉狀態(tài),單純的修改數(shù)據(jù)庫(kù)環(huán)境的autocommit不會(huì)對(duì)代碼的行為產(chǎn)生影響。

以上就是詳解MySQL與Spring的自動(dòng)提交(autocommit)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 自動(dòng)提交(autocommit)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SQL的substring_index()用法實(shí)例(MySQL字符串截取)

    SQL的substring_index()用法實(shí)例(MySQL字符串截取)

    substring_index?(字符串,分隔符,序號(hào)),主要作用是用于截取目標(biāo)字符串,下面這篇文章主要給大家介紹了關(guān)于SQL中substring_index()用法(MySQL字符串截取)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 解析mysql中max_connections與max_user_connections的區(qū)別

    解析mysql中max_connections與max_user_connections的區(qū)別

    本篇文章是對(duì)mysql中max_connections與max_user_connections的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹

    Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹

    這篇文章主要介紹了Mysql系統(tǒng)變量與狀態(tài)變量詳細(xì)介紹,能夠在程序運(yùn)行過程中影響Mysql程序行為的變量稱之為系統(tǒng)變量,想了解更多相關(guān)內(nèi)容的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • navicat不能創(chuàng)建函數(shù)解決方法分享

    navicat不能創(chuàng)建函數(shù)解決方法分享

    這篇文章主要介紹了navicat不能創(chuàng)建函數(shù)解決方法分享,小編覺得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • MySQL表分區(qū)的幾種實(shí)現(xiàn)

    MySQL表分區(qū)的幾種實(shí)現(xiàn)

    本文主要介紹了MySQL表分區(qū)的幾種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • MySQL筆記之索引的使用

    MySQL筆記之索引的使用

    索引是創(chuàng)建在表上的,對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)其作用主要在于提高查詢的速度,降低數(shù)據(jù)庫(kù)系統(tǒng)的性能開銷
    2013-05-05
  • MySQL三種安裝方法(yum安裝、編譯安裝、二進(jìn)制安裝)

    MySQL三種安裝方法(yum安裝、編譯安裝、二進(jìn)制安裝)

    本文主要介紹了MySQL三種安裝方法,包含yum安裝、編譯安裝、二進(jìn)制安裝這三種,文中通過示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • mysql的分區(qū)技術(shù)詳細(xì)介紹

    mysql的分區(qū)技術(shù)詳細(xì)介紹

    這篇文章主要介紹了mysql的分區(qū)技術(shù)詳細(xì)介紹,本文講解了分區(qū)技術(shù)概述、分區(qū)的類型及分區(qū)操作等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Mysql中事務(wù)ACID的實(shí)現(xiàn)原理詳解

    Mysql中事務(wù)ACID的實(shí)現(xiàn)原理詳解

    這篇文章主要給大家介紹了關(guān)于Mysql中事務(wù)ACID實(shí)現(xiàn)原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Mysql語句快速?gòu)?fù)習(xí)教程(全)

    Mysql語句快速?gòu)?fù)習(xí)教程(全)

    這篇文章主要介紹了Mysql語句快速?gòu)?fù)習(xí)教程(全)的相關(guān)資料,需要的朋友可以參考下
    2016-04-04

最新評(píng)論

扎鲁特旗| 福海县| 报价| 巩留县| 崇州市| 肥乡县| 阿勒泰市| 玉环县| 南木林县| 罗城| 壤塘县| 大邑县| 东山县| 菏泽市| 隆安县| 阿瓦提县| 洞头县| 碌曲县| 晴隆县| 南昌市| 景洪市| 榆树市| 泗阳县| SHOW| 阿拉善盟| 锡林郭勒盟| 章丘市| 隆子县| 鲁甸县| 文登市| 枣阳市| 靖宇县| 贞丰县| 浮梁县| 昔阳县| 余干县| 龙门县| 仁化县| 罗田县| 湖南省| 封开县|