亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySQL 事務autocommit自動提交操作

MySQL 事務autocommit自動提交操作

熱門標簽:武漢網絡外呼系統服務商 地圖標注費用是多少 電話外呼系統改號 南昌三維地圖標注 百應電話機器人優勢 怎樣在地圖標注銷售區域 啥是企業400電話辦理 曲靖移動外呼系統公司 外呼系統打電話上限是多少

MySQL默認操作模式就是autocommit自動提交模式。這就表示除非顯式地開始一個事務,否則每個查詢都被當做一個單獨的事務自動執行。我們可以通過設置autocommit的值改變是否是自動提交autocommit模式。

通過以下命令可以查看當前autocommit模式

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.04 sec)

從查詢結果中,我們發現Value的值是ON,表示autocommit開啟。我們可以通過以下SQL語句改變這個模式

mysql> set autocommit = 0;

值0和OFF都是一樣的,當然,1也就表示ON。通過以上設置autocommit=0,則用戶將一直處于某個事務中,直到執行一條commit提交或rollback語句才會結束當前事務重新開始一個新的事務。

舉個例子,張三給李四轉賬500元。那么在數據庫中應該是以下操作:

1,先查詢張三的賬戶余額是否足夠

2,張三的賬戶上減去500元

3,李四的賬戶上加上500元

以上三個步驟就可以放在一個事務中執行提交,要么全部執行要么全部不執行,如果一切都OK就commit提交永久性更改數據;如果出錯則rollback回滾到更改前的狀態。利用事務處理就不會出現張三的錢少了李四的賬戶卻沒有增加500元或者張三的錢沒有減去李四的賬戶卻加了500元。

MySQL默認的存儲引擎是MyISAM,MyISAM存儲引擎不支持事務處理,所以改變autocommit沒有什么作用。但不會報錯,所以要使用事務處理的童鞋一定要確定你所操作的表示支持事務處理的,如InnoDB。如果不知道表的存儲引擎可以通過查看建表語句查看建表的時候有沒有指定事務類型的存儲引擎,如果沒有指定存儲引擎默認則是MyISAM不支持事務的存儲引擎。

當然,事務處理是為了保障表數據原子性、一致性、隔離性、持久性。

這些都是要消耗系統資源的,要謹慎選擇。

補充:MySQL的事務處理(Transation)和自動執行(AutoCommit)與提交類型(Completion)

1、事務(transaction)

事務在計算機術語中是指訪問并可能更新數據庫中各種數據項的一個程序執行單元(unit)。事務主要用于處理操作量大,復雜度高的數據。如果你要刪除一條主表信息,而主表有多個從表的時候,你需要有步驟地刪除明細后再刪除主表信息,這個過程極其容易出錯,那么這個時候就是用事務才處理是最合適的了。

2、事務(Transcation)的用法

事務開始(start transaction or begin)

提交(commit)

回滾(rollback)

3、MYSQL支持的引擎(InnoDB)

show engines;

4、自動執行(AutoCommit)與提交類型(Completion)

使用事務有兩種方式,分別為隱式事務和顯式事務。隱式事務實際上就是自動提交,Oracle 默認不自動提交,需要手寫 COMMIT。在MySQL中,自動提交(autocommit)在支持事務(transaction)的引擎中,若autocommit=true,則不需要commit的情況下直接提交語句形成永久性修改,Mysql默認打開autocommit,也可以通過配置設置。

set autocommit=0;(AutoCommit Off)
set autocommit=1;(AutoCommit On)
set completion_type=0;(No Chain)
set completion_type=1;(Chain)
set completion_type=2;(Release)

也可以通過語句查詢當前配置

show variables like '%autocommit%';
show variables like '%completion%';

5、驗證例子

mysql> BEGIN;
 -> INSERT INTO test SELECT '關羽';
 -> COMMIT;
 -> BEGIN;
 -> INSERT INTO test SELECT '張飛';
 -> INSERT INTO test SELECT '張飛';
 -> ROLLBACK;
 -> SELECT * FROM test;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.03 sec)
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
ERROR 1062 (23000): Duplicate entry '張飛' for key 'PRIMARY'

mysql> select * from test;//

當前窗口結果:

新建窗口結果:

結論:由于test表中name的唯一性約束,看代碼的話,兩個"張飛"執行后(無論有無觸發主鍵約束),實際由于第二個"張飛"觸發了唯一性約束異常,所以我認為事務會跳出,所以在當前連接中,test表中可以看到一個張飛,實際上第二個事務,并沒有提交成功。

接下來,我們試試正常提交的數據。

mysql> BEGIN;
 -> INSERT INTO test SELECT '關羽';
 -> COMMIT;
 -> BEGIN;
 -> INSERT INTO test SELECT '張飛';
 -> INSERT INTO test SELECT '劉備';
 -> ROLLBACK;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.04 sec)


mysql> select * from test;//

當前窗口結果:

新建窗口結果:

結論:對比這次的測試結果,所以我認為第一個測試,并沒有執行rollback,而是跳出事務處理異常機制了。

因為mysql默認打開了autocommit,那么我想驗證下在無顯示事務的情況下(即無begin開頭),兩個"張飛"是如何自處的?

mysql> BEGIN;
 -> INSERT INTO test SELECT '關羽';
 -> COMMIT;
 -> INSERT INTO test SELECT '張飛';
 -> INSERT INTO test SELECT '張飛';
 -> ROLLBACK;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.05 sec)
Records: 1 Duplicates: 0 Warnings: 0

ERROR 1062 (23000): Duplicate entry '張飛' for key 'PRIMARY'
mysql> select *from test;//

當前窗口結果:

新建窗口結果:

結論:其實看執行結果就知道了,第1個"張飛"作為單獨的事務已經執行成功了,第二個"張飛"由于觸發了主鍵約束所以執行失敗了。除了顯示事務外,有沒有辦法在沒結束事務前(無Commit)前,可以讓兩個"張飛"合并成一個事務呢?

可以設置set completion_type=1;(chain),也就是說無論幾個"張飛"在還沒提交之前,都是一個事務。

代碼與上面的一樣。

mysql> SET @@completion_type = 1;
 -> BEGIN;
 -> INSERT INTO test SELECT '關羽';
 -> COMMIT;
 -> INSERT INTO test SELECT '張飛';
 -> INSERT INTO test SELECT '張飛';
 -> ROLLBACK;
 -> //
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
ERROR 1062 (23000): Duplicate entry '張飛' for key 'PRIMARY'

當前窗口結果:

新建窗口結果:

結論:因為我設置了set completion_type=1(chain),相當與在第一個"張飛"前加了begin,所以第二個"張飛"由于觸發了主鍵約束所以導致事務失敗,插入數據失敗。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 詳解MySQL中事務隔離級別的實現原理
  • MySQL執行事務的語法與流程詳解
  • mysql、oracle默認事務隔離級別的說明
  • MySQL 查看事務和鎖情況的常用語句分享
  • MySQL 主從同步,事務回滾的實現原理
  • MySQL數據庫事務與鎖深入分析
  • Mysql事務中Update是否會鎖表?
  • 深入理解PHP+Mysql分布式事務與解決方案
  • MySQL如何實現事務的ACID
  • MySQL為什么要避免大事務以及大事務解決的方法
  • 詳解MySQL中事務的持久性實現原理

標簽:荊州 甘南 黑河 滄州 隨州 錦州 吉林 資陽

巨人網絡通訊聲明:本文標題《MySQL 事務autocommit自動提交操作》,本文關鍵詞  MySQL,事務,autocommit,自動,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 事務autocommit自動提交操作》相關的同類信息!
  • 本頁收集關于MySQL 事務autocommit自動提交操作的相關信息資訊供網民參考!
  • 推薦文章
    中文字幕一区二区三区 精品| 亚洲女人国产香蕉久久精品| 色综合久久天天综合| 国产网站免费在线观看| 九九九国产| 欧美激情影院| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 99热精品在线| 国产高清视频免费观看| 四虎影视久久| 精品视频在线观看一区二区三区| 亚飞与亚基在线观看| 国产成人欧美一区二区三区的| 久久精品欧美一区二区| 成人av在线播放| 精品在线视频播放| 天堂网中文字幕| 99色视频在线| 日本免费乱理伦片在线观看2018| 国产一区二区精品久久91| 成人影视在线播放| 欧美另类videosbestsex久久| 亚洲精品影院一区二区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品在线观看一区| 日韩女人做爰大片| 中文字幕一区二区三区 精品| 成人高清视频在线观看| 天天色成人| 高清一级片| 欧美激情伊人| 可以免费在线看黄的网站| 精品国产亚洲一区二区三区| 精品在线观看一区| 人人干人人草| 色综合久久久久综合体桃花网| 91麻豆爱豆果冻天美星空| 久久国产精品永久免费网站| 国产a网| 欧美一区二区三区性| 美女免费毛片| 亚洲精品久久玖玖玖玖| 九九精品影院| 精品国产一区二区三区久久久蜜臀| 91麻豆精品国产自产在线观看一区| 国产精品自拍亚洲| 一级女人毛片人一女人| 国产视频一区二区在线播放| 国产国语在线播放视频| 精品国产三级a| 精品国产香蕉在线播出 | 精品国产三级a| 亚欧乱色一区二区三区| 国产高清视频免费观看| 黄视频网站免费| 午夜在线亚洲男人午在线| 黄视频网站在线免费观看| 日韩专区第一页| 日韩免费片| 精品国产亚洲一区二区三区| 91麻豆精品国产片在线观看| 欧美国产日韩一区二区三区| 亚飞与亚基在线观看| 国产网站免费在线观看| 欧美另类videosbestsex| 国产亚洲男人的天堂在线观看| 青青青草影院 | 免费国产在线观看| 亚洲精品中文字幕久久久久久| 成人高清免费| 欧美日本国产| 日韩av片免费播放| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美电影免费| 亚州视频一区二区| 免费的黄视频| 中文字幕Aⅴ资源网| 欧美另类videosbestsex| 欧美a级大片| 麻豆网站在线看| 成人在免费观看视频国产| 免费国产在线观看| 国产91精品一区二区| 日韩在线观看免费完整版视频| 亚洲精品中文字幕久久久久久| 一级毛片视频免费| 黄色福利片| 日韩免费在线视频| 欧美大片a一级毛片视频| 欧美a级v片不卡在线观看| 久草免费在线视频| 精品在线视频播放| 高清一级片| 国产一区二区精品久久| 国产成人欧美一区二区三区的| 天天色色网| 欧美a级大片| 日韩欧美一及在线播放| 亚洲 国产精品 日韩| 精品国产一区二区三区久久久狼 | 色综合久久天天综合| 精品视频在线看 | 国产一区二区高清视频| 日本在线www| 日韩女人做爰大片| 国产激情视频在线观看| 亚洲 欧美 成人日韩| 国产视频在线免费观看| 精品视频在线看 | 欧美激情一区二区三区视频高清| 精品视频免费观看| 日韩免费在线视频| 久久99爰这里有精品国产| 日韩av成人| 日本特黄特黄aaaaa大片| 国产亚洲精品aaa大片| 精品视频在线看 | 人人干人人草| 91麻豆精品国产片在线观看| 精品国产一区二区三区久久久狼 | 美女免费毛片| 国产亚洲男人的天堂在线观看| 日韩专区在线播放| 一级片片| 精品国产亚洲一区二区三区| 欧美国产日韩一区二区三区| 精品视频免费观看| 亚洲精品影院| 亚飞与亚基在线观看| 日韩中文字幕一区二区不卡| 国产视频一区二区在线播放| 日韩中文字幕在线观看视频| 日本特黄特色aa大片免费| 999精品视频在线| 免费国产在线视频| 欧美大片a一级毛片视频| 韩国毛片免费大片| 欧美电影免费| 欧美a级大片| 精品国产亚一区二区三区| 亚洲精品久久玖玖玖玖| 成人高清视频在线观看| 国产一区二区精品在线观看| 欧美国产日韩一区二区三区| 国产一区免费在线观看| 国产综合91天堂亚洲国产| 精品视频一区二区三区免费| 日韩av成人| 中文字幕一区二区三区 精品| 天天做人人爱夜夜爽2020毛片| 国产一区二区精品久久91| 午夜在线观看视频免费 成人| 国产成人精品一区二区视频| 免费国产在线视频| 成人在免费观看视频国产| 久久精品店| 精品视频在线观看免费| 99色吧| 亚洲女人国产香蕉久久精品| 亚洲精品影院| 欧美一区二区三区性| 国产美女在线一区二区三区| 欧美a级v片不卡在线观看| 国产91丝袜在线播放0| 日韩专区第一页| 天堂网中文字幕| 国产高清视频免费观看| 国产亚洲精品aaa大片| 91麻豆精品国产自产在线观看一区| 日韩欧美一及在线播放| 日韩一级黄色片| 国产极品精频在线观看| 九九热精品免费观看| 日韩专区第一页| 日韩av片免费播放| 精品国产一区二区三区精东影业| 黄色免费三级| 国产不卡高清在线观看视频| 亚洲 国产精品 日韩| 色综合久久久久综合体桃花网| 免费一级生活片| 九九精品影院| 99久久精品国产高清一区二区| 久久99爰这里有精品国产| 欧美日本免费| 91麻豆精品国产自产在线观看一区| 国产91精品一区二区| 可以免费在线看黄的网站| 99久久网站| 精品久久久久久免费影院| 亚洲女人国产香蕉久久精品| 久久精品店| 黄色免费三级| 香蕉视频三级| 91麻豆精品国产综合久久久| 九九九国产| 天天做人人爱夜夜爽2020毛片| 黄视频网站免费| 日韩av成人| 可以免费在线看黄的网站|