亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL 如何使用事務(wù)

瀏覽:135日期:2023-10-11 18:47:08

基礎(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)開啟事務(wù)后則變?yōu)槭謩?dòng)提交。

基本使用

單獨(dú)開啟

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

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; -- 開啟事務(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)提交

全局開啟

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

-- 關(guān)閉自動(dòng)提交SET AUTOCOMMIT = 0;INSERT INTO user(name,balance) VALUES(’Jack’,8000);COMMIT;-- 開啟自動(dòng)提交SET AUTOCOMMIT = 1;

事務(wù)隔離

并發(fā)問題

當(dāng)高并發(fā)訪問會(huì)遇到多個(gè)事務(wù)的隔離問題,可能會(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)還有一條記錄沒有改過(guò)來(lái),就好像發(fā)生了幻覺一樣,這就叫幻讀。不可重復(fù)讀的和幻讀很容易混淆,不可重復(fù)讀側(cè)重于修改,幻讀側(cè)重于新增或刪除。解決不可重復(fù)讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

隔離級(jí)別

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

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

查詢?cè)O(shè)置

查詢隔離級(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)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 狠狠综合视频精品播放 | 美国一级黄色毛片 | 黑人一区二区三区 | 黄色录相一级片 | 1024国产基地永久免费 | 国产一区自拍视频 | 国产免费麻豆 | 国产身材极品喷水 在线播放 | 成人做爰全过程免费看视频 | 欧美视频黑鬼大战白妞 | 国产农村一一级特黄毛片 | 久久国产99| 国产毛片在线高清视频 | 色综合综合色 | 日韩高清在线亚洲专区vr | 国产高清美女一级a毛片久久w | 蜜桃视频一区二区三区四区 | 中国xxxxx高清免费看视频 | 国内精品视频在线播放一区 | a天堂专区一区二区三区 | 呦系列视频一区二区三区 | 香蕉在线视频观看 | 一区二区三区欧美视频 | 色婷婷啪啪 | 日本久久综合视频 | 国产制服 国产制服一区二区 | 国产免费又色又爽又黄的网站 | 国产免费午夜a无码v视频 | 韩国免费高清一级 | 亚洲高清日韩精品第一区 | 国产91区精品福利在线社区 | 日韩午夜大片 | 国产大片线上免费看 | a毛片全部免费播放 | 久久www香蕉免费人成 | 亚洲狠狠ady亚洲精品大秀 | 日本国产免费一区不卡在线 | 久久国产精品成人免费 | 深夜国产一区二区三区在线看 | 欧美性色黄大片一级毛片视频 | 午夜在线播放免费人成无 |