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

MySQL 如何使用事務(wù)

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

基礎(chǔ)知識(shí)

事務(wù)是指對(duì)一組 SQL 語(yǔ)句進(jìn)行一個(gè)原子化的操作,即如果這一組 SQL 語(yǔ)句中有一條發(fā)生錯(cuò)誤,那么其他的同組 SQL 就都不會(huì)被執(zhí)行。

你可以把它當(dāng)作一個(gè)測(cè)試,當(dāng)你執(zhí)行完一組 SQL 語(yǔ)句后,可以查看一下結(jié)果是否正確,如果正確后可以選擇提交,如果不正確則可以進(jìn)行回滾,恢復(fù)到原本的狀態(tài)。

在 MySQL 中,所有的操作默認(rèn)都是自動(dòng)進(jìn)行提交,當(dāng)開(kāi)啟事務(wù)后則變?yōu)槭謩?dòng)提交。

基本使用

單獨(dú)開(kāi)啟

單獨(dú)開(kāi)啟是指對(duì)某一組的 SQL 語(yǔ)句開(kāi)啟事務(wù)。

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

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


start transaction; -- 開(kāi)啟事務(wù),增刪改操作均要手動(dòng)提交

  UPDATE user SET balance = 500 WHERE name = "Yunya"; -- Yunya對(duì)Ken轉(zhuǎn)賬500
  UPDATE user SET balance = 1000 WHERE name = "Ken";
  SELECT * FROM user; -- 驗(yàn)證是否出錯(cuò)

  COMMIT; -- 提交事務(wù):手動(dòng)提交上面兩條UPDATE
  -- ROLLBACK; -- 事務(wù)回滾:轉(zhuǎn)賬金額不對(duì)時(shí)使用回滾

BEGIN -- 關(guān)閉事務(wù),增刪改操作均自動(dòng)提交

全局開(kāi)啟

如果所有 SQL 都使用事務(wù)操作,我們可以通過(guò) SET AUTOCOMMIT=0 關(guān)閉自動(dòng)提交來(lái)開(kāi)啟事務(wù)機(jī)制,這樣所有語(yǔ)句都是事務(wù)類(lèi)型。

-- 關(guān)閉自動(dòng)提交
SET AUTOCOMMIT = 0;

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

-- 開(kāi)啟自動(dòng)提交
SET AUTOCOMMIT = 1;

事務(wù)隔離

并發(fā)問(wèn)題

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

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

隔離級(jí)別

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

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

查詢(xún)?cè)O(shè)置

查詢(xún)隔離級(jí)別

select @@tx_isolation;

設(shè)置隔離級(jí)別

set session transaction isolation level read uncommitted; -- set session只對(duì)當(dāng)前會(huì)話有效,set global則對(duì)全局有效

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

相關(guān)文章

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

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

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

    MySQL性能優(yōu)化

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

    Mysql帶返回值與不帶返回值的2種存儲(chǔ)過(guò)程寫(xiě)法

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

    MGR集群搭建及配置過(guò)程

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

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

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

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

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

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

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

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

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

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

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

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

    在本文中我們給大家分享了關(guān)于怎么使用Mysql數(shù)據(jù)表中的蠕蟲(chóng)復(fù)制的相關(guān)知識(shí)點(diǎn),有興趣的朋友們學(xué)習(xí)下。
    2019-02-02

最新評(píng)論