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

MySQL 如何使用事務(wù)

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

基礎(chǔ)知識

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

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

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

基本使用

單獨開啟

單獨開啟是指對某一組的 SQL 語句開啟事務(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ù),增刪改操作均要手動提交

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

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

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

全局開啟

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

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

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

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

事務(wù)隔離

并發(fā)問題

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

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

隔離級別

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

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

查詢設(shè)置

查詢隔離級別

select @@tx_isolation;

設(shè)置隔離級別

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

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

相關(guān)文章

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

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

    有時候我們在后臺選擇了一系列的id,我們想安裝填寫id的順序進行排序,那么就需要下面的order by方法,測試通過
    2013-03-03
  • MySQL權(quán)限變更何時生效

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

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

    Mac MySQL重置Root密碼的教程

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

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

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

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

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

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

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

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

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

    Mysql 5.7.9 shutdown 語法實例詳解

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

    mysql存儲emoji表情報錯的處理方法【更改編碼為utf8mb4】

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

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

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

最新評論

吕梁市| 沙坪坝区| 阿坝县| 象山县| 定日县| 拉萨市| 疏勒县| 屏山县| 三明市| 兴仁县| 明光市| 汉寿县| 石台县| 湘乡市| 汕尾市| 云龙县| 大田县| 丰顺县| 新乡县| 大竹县| 韩城市| 深州市| 吉木乃县| 泰安市| 剑河县| 重庆市| 大方县| 泾阳县| 蒙自县| 汨罗市| 繁峙县| 壤塘县| 沁水县| 普格县| 林口县| 盐源县| 通河县| 盈江县| 枣强县| 蓝山县| 龙州县|