婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL 如何使用事務

MySQL 如何使用事務

熱門標簽:廣東400企業電話申請流程 新鄉智能外呼系統好處 宜賓全自動外呼系統廠家 許昌外呼增值業務線路 咸陽防封電銷卡 申請400電話電話價格 臨沂做地圖標注 地圖標注客戶付款 石家莊400電話辦理公司

基礎知識

事務是指對一組 SQL 語句進行一個原子化的操作,即如果這一組 SQL 語句中有一條發生錯誤,那么其他的同組 SQL 就都不會被執行。

你可以把它當作一個測試,當你執行完一組 SQL 語句后,可以查看一下結果是否正確,如果正確后可以選擇提交,如果不正確則可以進行回滾,恢復到原本的狀態。

在 MySQL 中,所有的操作默認都是自動進行提交,當開啟事務后則變為手動提交。

基本使用

單獨開啟

單獨開啟是指對某一組的 SQL 語句開啟事務。

CREATE TABLE user(
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name CHAR(12) NOT NULL,
  balance INT UNSIGNED 
); -- 創建用戶表

INSERT INTO user(name,balance) VALUES
  ("Yunya",1000),
  ("Ken",500); -- 插入數據


start transaction; -- 開啟事務,增刪改操作均要手動提交

  UPDATE user SET balance = 500 WHERE name = "Yunya"; -- Yunya對Ken轉賬500
  UPDATE user SET balance = 1000 WHERE name = "Ken";
  SELECT * FROM user; -- 驗證是否出錯

  COMMIT; -- 提交事務:手動提交上面兩條UPDATE
  -- ROLLBACK; -- 事務回滾:轉賬金額不對時使用回滾

BEGIN -- 關閉事務,增刪改操作均自動提交

全局開啟

如果所有 SQL 都使用事務操作,我們可以通過 SET AUTOCOMMIT=0 關閉自動提交來開啟事務機制,這樣所有語句都是事務類型。

-- 關閉自動提交
SET AUTOCOMMIT = 0;

INSERT INTO user(name,balance) VALUES
	('Jack',8000);
	
COMMIT;

-- 開啟自動提交
SET AUTOCOMMIT = 1;

事務隔離

并發問題

當高并發訪問會遇到多個事務的隔離問題,可能會出現以下:

臟讀:事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據
不可重復讀:事務A多次讀取同一數據,事務B在事務A多次讀取的過程中,對數據作了更新并提交,導致事務A多次讀取同一數據時,結果不一致。
幻讀:系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
不可重復讀的和幻讀很容易混淆,不可重復讀側重于修改,幻讀側重于新增或刪除。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

隔離級別

系統默認隔離級別為3級,可能出現幻讀的情況。

隔離級別 中文釋義 臟讀 不可重復讀 幻讀 說明
read uncommitted 讀未提交 最低的事務隔離級別,一個事務還沒提交時,它做的變更就能被別的事務看到
read committed 不可重復讀 保證一個事物提交后才能被另外一個事務讀取。另外一個事務不能讀取該事物未提交的數據
repeatable read 可重復讀 多次讀取同一范圍的數據會返回第一次查詢的快照,即使其他事務對該數據做了更新修改。事務在執行期間看到的數據前后必須是一致的
serializable 串行化 事務 100% 隔離,可避免臟讀、不可重復讀、幻讀的發生。花費最高代價但最可靠的事務隔離級別

查詢設置

查詢隔離級別

select @@tx_isolation;

設置隔離級別

set session transaction isolation level read uncommitted; -- set session只對當前會話有效,set global則對全局有效

以上就是MySQL 如何使用事務的詳細內容,更多關于MySQL 事務的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 深入理解PHP+Mysql分布式事務與解決方案
  • 淺析MySQL 鎖和事務
  • 聊聊MySQL事務的特性和隔離級別
  • MySQL如何實現事務的ACID
  • MySQL為什么要避免大事務以及大事務解決的方法
  • Mysql事務隔離級別原理實例解析
  • MySQL查看和修改事務隔離級別的實例講解
  • Mysql事務特性和級別原理解析

標簽:北京 臺灣 合肥 貴州 鷹潭 鎮江 日照 阜新

巨人網絡通訊聲明:本文標題《MySQL 如何使用事務》,本文關鍵詞  MySQL,如何,使用,事務,MySQL,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 如何使用事務》相關的同類信息!
  • 本頁收集關于MySQL 如何使用事務的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 通许县| 高密市| 大埔区| 开化县| 乌拉特后旗| 涪陵区| 深州市| 驻马店市| 阿鲁科尔沁旗| 毕节市| 林芝县| 嘉义市| 如东县| 梓潼县| 红原县| 罗源县| 大城县| 龙陵县| 衢州市| 特克斯县| 景德镇市| 周口市| 晋州市| 垫江县| 乌鲁木齐市| 盈江县| 晋江市| 平舆县| 清原| 保亭| 天镇县| 安康市| 津南区| 富裕县| 葫芦岛市| 鲜城| 佛冈县| 乐清市| 定西市| 和田市| 微山县|