最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)開啟事務(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ā)問(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ì)返回第一次查詢的快照,即使其他事務(wù)對(duì)該數(shù)據(jù)做了更新修改。事務(wù)在執(zhí)行期間看到的數(shù)據(jù)前后必須是一致的
serializable 串行化 事務(wù) 100% 隔離,可避免臟讀、不可重復(fù)讀、幻讀的發(fā)生?;ㄙM(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)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mysql select in 按id排序?qū)崿F(xiàn)方法

    Mysql select in 按id排序?qū)崿F(xiàn)方法

    有時(shí)候我們?cè)诤笈_(tái)選擇了一系列的id,我們想安裝填寫id的順序進(jìn)行排序,那么就需要下面的order by方法,測(cè)試通過(guò)
    2013-03-03
  • MySQL權(quán)限變更何時(shí)生效

    MySQL權(quán)限變更何時(shí)生效

    本文為大家講述了對(duì)三種級(jí)別權(quán)限的變更后,使其生效的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-10-10
  • Mac MySQL重置Root密碼的教程

    Mac MySQL重置Root密碼的教程

    安裝MySQL后時(shí)間太長(zhǎng)了會(huì)忘記密碼,在這里總結(jié)一下忘記密碼時(shí)如何重置本地MySQL Root密碼。感興趣的朋友跟隨腳本之家一起學(xué)習(xí)吧
    2018-03-03
  • 使用Mysql5.x以上版本出現(xiàn)報(bào)錯(cuò)#1929 Incorrect datetime value: '''''''' for column ''''createtime''''的快速解決方法

    使用Mysql5.x以上版本出現(xiàn)報(bào)錯(cuò)#1929 Incorrect datetime value: '''''''' f

    我的MySQL安裝后,保存刪除表數(shù)據(jù)總是出現(xiàn)#1929 Incorrect datetime value: '' for column 'createtime' 的報(bào)錯(cuò)提醒,導(dǎo)致不能刪除表里數(shù)據(jù)。下面小編給大家分析原因及解決辦法,需要的朋友可以參考下
    2017-01-01
  • mysql中You can’t specify target table for update in FROM clause錯(cuò)誤解決方法

    mysql中You can’t specify target table for update in FROM clau

    這篇文章主要介紹了mysql中You can’t specify target table for update in FROM clause錯(cuò)誤解決方法,需要的朋友可以參考下
    2015-02-02
  • MySQL?中字符集詳細(xì)介紹

    MySQL?中字符集詳細(xì)介紹

    這篇文章主要介紹了MySQL?中字符集詳細(xì)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • MySQL關(guān)閉過(guò)程詳解和安全關(guān)閉MySQL的方法

    MySQL關(guān)閉過(guò)程詳解和安全關(guān)閉MySQL的方法

    這篇文章主要介紹了MySQL關(guān)閉過(guò)程詳解和安全關(guān)閉MySQL的方法,在了解了關(guān)閉過(guò)程后,出現(xiàn)故障能迅速定位,本文還給出了安全關(guān)閉MySQL的建議及方法,需要的朋友可以參考下
    2014-08-08
  • Mysql 5.7.9 shutdown 語(yǔ)法實(shí)例詳解

    Mysql 5.7.9 shutdown 語(yǔ)法實(shí)例詳解

    之前如果想關(guān)閉一個(gè)mysql數(shù)據(jù)庫(kù)可以通過(guò)kill 命令、mysqladmin shutdown 、service mysqld stop 等這樣的方式。然而在mysql-5.7.9之后mysql終于提供了SQL接口的shutdown語(yǔ)法啦
    2017-06-06
  • mysql存儲(chǔ)emoji表情報(bào)錯(cuò)的處理方法【更改編碼為utf8mb4】

    mysql存儲(chǔ)emoji表情報(bào)錯(cuò)的處理方法【更改編碼為utf8mb4】

    這篇文章主要介紹了mysql存儲(chǔ)emoji表情報(bào)錯(cuò)的處理方法,較為詳細(xì)的分析了通過(guò)更改mysql編碼為utf8mb4解決存儲(chǔ)emoji表情報(bào)錯(cuò)的相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Centos6.9安裝Mysql5.7.18步驟記錄

    Centos6.9安裝Mysql5.7.18步驟記錄

    本文給大家詳細(xì)介紹了Centos6.9安裝Mysql5.7.18的步驟,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-06-06

最新評(píng)論

宁乡县| 乌苏市| 东光县| SHOW| 彭泽县| 常山县| 大同市| 略阳县| 邛崃市| 博野县| 剑川县| 洪江市| 景泰县| 白银市| 博爱县| 象山县| 海晏县| 莱州市| 平利县| 文昌市| 阿城市| 辰溪县| 会泽县| 任丘市| 厦门市| 玉龙| 黔西| 宜兴市| 罗平县| 高台县| 武川县| 石林| 朝阳区| 汪清县| 宜兴市| 东乌珠穆沁旗| 滦南县| 宁阳县| 龙口市| 上高县| 永和县|