欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 如何使用事務

 更新時間:2020年09月07日 09:42:28   作者:云崖先生  
這篇文章主要介紹了MySQL 如何使用事務,幫助大家更好的理解和學習MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下

基礎知識

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

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

在 MySQL 中,所有的操作默認都是自動進行提交,當開啟事務后則變?yōu)槭謩犹峤弧?/p>

基本使用

單獨開啟

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

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

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


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;

事務隔離

并發(fā)問題

當高并發(fā)訪問會遇到多個事務的隔離問題,可能會出現(xiàn)以下:

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

隔離級別

系統(tǒng)默認隔離級別為3級,可能出現(xiàn)幻讀的情況。

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

查詢設置

查詢隔離級別

select @@tx_isolation;

設置隔離級別

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

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

相關文章

  • MySQL系列連載之XtraBackup?備份原理解析

    MySQL系列連載之XtraBackup?備份原理解析

    關于mysql的備份和恢復,比較傳統(tǒng)的是用mysqldump工具,今天本文推薦另一個備份工具innobackupex,重點給大家介紹XtraBackup?備份的相關知識,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • MySQL性能優(yōu)化

    MySQL性能優(yōu)化

    MySQL是目前使用最多的開源數(shù)據(jù)庫,但是MySQL數(shù)據(jù)庫的默認設置性能非常的差,僅僅是一個玩具數(shù)據(jù)庫。因此在產(chǎn)品中使用MySQL數(shù)據(jù)庫必須進行必要的優(yōu)化
    2013-02-02
  • Mysql帶返回值與不帶返回值的2種存儲過程寫法

    Mysql帶返回值與不帶返回值的2種存儲過程寫法

    這篇文章主要介紹了Mysql帶返回值與不帶返回值的2種存儲過程寫法,需要的朋友可以參考下
    2017-10-10
  • MGR集群搭建及配置過程

    MGR集群搭建及配置過程

    MGR是MySQL數(shù)據(jù)庫未來發(fā)展的一個重要方向,本文重點給大家介紹MGR集群搭建過程分析,對MGR集群搭建相關知識感興趣的朋友一起看看吧
    2022-02-02
  • Oracle與MySQL的區(qū)別及優(yōu)缺點

    Oracle與MySQL的區(qū)別及優(yōu)缺點

    這篇文章主要介紹了Oracle與MySQL的區(qū)別及優(yōu)缺點,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參加一下
    2022-08-08
  • MySQL數(shù)據(jù)庫如何正確設置主鍵

    MySQL數(shù)據(jù)庫如何正確設置主鍵

    主鍵是用于唯一標識數(shù)據(jù)庫表中每一行數(shù)據(jù)的一列或一組列,主鍵可以確保數(shù)據(jù)的唯一性和完整性,這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫如何正確設置主鍵的相關資料,需要的朋友可以參考下
    2024-04-04
  • Tableau連接mysql數(shù)據(jù)庫的實現(xiàn)步驟

    Tableau連接mysql數(shù)據(jù)庫的實現(xiàn)步驟

    本文主要介紹了Tableau連接mysql數(shù)據(jù)庫的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 在MySQL中自定義參數(shù)的使用詳解

    在MySQL中自定義參數(shù)的使用詳解

    今天小編就為大家分享一篇在MySQL中自定義參數(shù)的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解MySQL存儲過程的創(chuàng)建和調(diào)用

    詳解MySQL存儲過程的創(chuàng)建和調(diào)用

    這篇文章主要為大家介紹了MySQL存儲過程的創(chuàng)建和調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Mysql數(shù)據(jù)表中的蠕蟲復制使用方法

    Mysql數(shù)據(jù)表中的蠕蟲復制使用方法

    在本文中我們給大家分享了關于怎么使用Mysql數(shù)據(jù)表中的蠕蟲復制的相關知識點,有興趣的朋友們學習下。
    2019-02-02

最新評論