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

MySQL基礎(chǔ)教程之事務(wù)異常情況

 更新時(shí)間:2022年10月29日 09:02:56   作者:木木止月  
事務(wù)(Transaction)是訪問和更新數(shù)據(jù)庫(kù)的程序執(zhí)行單元;事務(wù)中可能包含一個(gè)或多個(gè)sql語句,這些語句要么都執(zhí)行,要么都不執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于MySQL基礎(chǔ)教程之事務(wù)異常情況的相關(guān)資料,需要的朋友可以參考下

測(cè)試異常情況

-- 1. 查詢張三余額
select * from account where name = '張三';
-- 2. 張三的余額減少1000
update account set money = money - 1000 where name = '張三';
出錯(cuò)了....
-- 3. 李四的余額增加1000
update account set money = money + 1000 where name = '李四';
  • 我們把數(shù)據(jù)都恢復(fù)到2000, 然后再次一次性執(zhí)行上述的SQL語句(出錯(cuò)了.... 這句話不符合SQL語 法,執(zhí)行就會(huì)報(bào)錯(cuò)),檢查最終的數(shù)據(jù)情況, 發(fā)現(xiàn)數(shù)據(jù)在操作前后不一致了。

控制事務(wù)一

查看/設(shè)置事務(wù)提交方式

SELECT @@autocommit ;
SET @@autocommit = 0 ;

提交事務(wù)

COMMIT;

回滾事務(wù)

ROLLBACK;

注意:

上述的這種方式,我們是修改了事務(wù)的自動(dòng)提交行為, 把默認(rèn)的自動(dòng)提交修改為了手動(dòng)提 交, 此時(shí)我們執(zhí)行的DML語句都不會(huì)提交, 需要手動(dòng)的執(zhí)行commit進(jìn)行提交。

控制事務(wù)二

開啟事務(wù)

START TRANSACTION 或 BEGIN ;

提交事務(wù)

COMMIT;

回滾事務(wù)

ROLLBACK;

轉(zhuǎn)賬案例:

-- 開啟事務(wù)
start transaction
-- 1. 查詢張三余額
select * from account where name = '張三';
-- 2. 張三的余額減少1000
update account set money = money - 1000 where name = '張三';
-- 3. 李四的余額增加1000
update account set money = money + 1000 where name = '李四';
-- 如果正常執(zhí)行完畢, 則提交事務(wù)
commit;
-- 如果執(zhí)行過程中報(bào)錯(cuò), 則回滾事務(wù)
-- rollback;

事務(wù)四大特性

  • 原子性(Atomicity):事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗。
  • 一致性(Consistency):事務(wù)完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。
  • 隔離性(Isolation):數(shù)據(jù)庫(kù)系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨(dú)立環(huán)境下運(yùn)行。
  • 持久性(Durability):事務(wù)一旦提交或回滾,它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久的。上述就是事務(wù)的四大特性,簡(jiǎn)稱ACID。

補(bǔ)充:Mysql 事務(wù)并發(fā)處理的三種異常

臟讀(Dirty Read)【一個(gè)事務(wù)可能讀取到另一個(gè)事務(wù)更新但未提交的數(shù)據(jù),這個(gè)數(shù)據(jù)有可能是臟數(shù)據(jù)】

不可重復(fù)讀(Nnrepeatable Read)【事務(wù)不可重復(fù)讀同一條記錄,因?yàn)楹芸赡茏x到的結(jié)果不一致】

幻讀(Phantom Read)【幻讀就是沒有讀到的記錄,以為不存在,但其實(shí)是可以更新成功的,并且,更新成功后,再次讀取,就出現(xiàn)了?!?/p>

A1訪問數(shù)據(jù)庫(kù),正在進(jìn)行事務(wù),往表B里加入一條記錄,但是還未提交該事務(wù),此時(shí)A2也去訪問數(shù)據(jù)庫(kù)了,這個(gè)時(shí)候,A2可以看到A1加入的數(shù)據(jù),這種現(xiàn)象就是臟讀。

A2訪問數(shù)據(jù)庫(kù)查看id=1的數(shù)據(jù),這個(gè)時(shí)候A1訪問數(shù)據(jù)庫(kù),開始了一個(gè)事務(wù),更新了id=1的數(shù)據(jù),且沒有提交。然后A2又去訪問數(shù)據(jù)庫(kù)查看id=1的數(shù)據(jù),看到的數(shù)據(jù)跟第一次看到的數(shù)據(jù)不一樣,而是A1更新的數(shù)據(jù),這種現(xiàn)象就是不可重復(fù)讀。

A2訪問數(shù)據(jù)庫(kù),查看B表里的全部數(shù)據(jù)。這個(gè)時(shí)候A1又往B表里加一條記錄,開始了事務(wù)但是還未提交。這個(gè)時(shí)候A2又去查看了一下,就出現(xiàn)了A1加進(jìn)去的但還未提交的數(shù)據(jù),這種現(xiàn)象就是幻讀。

總結(jié)

到此這篇關(guān)于MySQL基礎(chǔ)教程之事務(wù)異常情況的文章就介紹到這了,更多相關(guān)MySQL事務(wù)異常情況內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql緩沖和緩存設(shè)置詳解

    mysql緩沖和緩存設(shè)置詳解

    本文主要給大家講解的是mysql優(yōu)化過程中比較重要的2個(gè)參數(shù)緩沖和緩存的設(shè)置,希望大家能夠喜歡
    2016-12-12
  • Mysql ID生成策略的三種方法選擇及優(yōu)缺點(diǎn)

    Mysql ID生成策略的三種方法選擇及優(yōu)缺點(diǎn)

    mysql ID生成策略一般常用的有三種,包括自增、UUID 以及雪花算法,本文主要介紹了Mysql ID生成策略的三種方法選擇及優(yōu)缺點(diǎn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • MySQL取消了Query Cache的原因

    MySQL取消了Query Cache的原因

    這篇文章主要介紹了MySQL取消了Query Cache的原因,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-10-10
  • MySQL數(shù)據(jù)庫(kù)分庫(kù)分表的方案

    MySQL數(shù)據(jù)庫(kù)分庫(kù)分表的方案

    隨著項(xiàng)目不斷迭代,使用人數(shù)的不斷增加,數(shù)據(jù)庫(kù)中某些表數(shù)據(jù)正在逐步膨脹,往單表千萬迅速靠攏,,所以最近也在考慮做一下分庫(kù)分表,本文就給大家詳細(xì)講解了什么分庫(kù)分表和分庫(kù)分表的方案,需要的朋友可以參考下
    2023-11-11
  • mysql 動(dòng)態(tài)執(zhí)行存儲(chǔ)過程語句

    mysql 動(dòng)態(tài)執(zhí)行存儲(chǔ)過程語句

    MSSQL中動(dòng)態(tài)執(zhí)行sql語句可以使用EXEC()函數(shù)。MSSQL中也有類似的函數(shù)EXECUTE(),不過不同的是MYSQL中動(dòng)態(tài)執(zhí)行存儲(chǔ)過程語句與MSSQL還是有區(qū)別的。
    2009-07-07
  • MySQL對(duì)數(shù)據(jù)庫(kù)和表進(jìn)行DDL命令的操作代碼

    MySQL對(duì)數(shù)據(jù)庫(kù)和表進(jìn)行DDL命令的操作代碼

    DDL(Data?Definition?Language),是數(shù)據(jù)定義語言的縮寫,它是SQL(Structured?Query?Language)語言的一個(gè)子集,用于定義或修改數(shù)據(jù)庫(kù)的結(jié)構(gòu),本文給大家介紹了MySQL對(duì)數(shù)據(jù)庫(kù)和表進(jìn)行DDL命令的操作,需要的朋友可以參考下
    2024-07-07
  • MySQL中varchar(n) 中n最大取值為多少

    MySQL中varchar(n) 中n最大取值為多少

    本文主要介紹了MySQL中varchar(n) 中n最大取值為多少
    2024-08-08
  • IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug

    IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug

    這篇文章主要介紹了IDEA使用mybatis-generator以及配上mysql8.0.3版本遇到的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • MySQL8 臨時(shí)關(guān)閉緩存的方法實(shí)現(xiàn)

    MySQL8 臨時(shí)關(guān)閉緩存的方法實(shí)現(xiàn)

    在某些場(chǎng)景下,如基準(zhǔn)測(cè)試、數(shù)據(jù)一致性檢查或高頻數(shù)據(jù)更新,可能需要臨時(shí)關(guān)閉緩存以獲得更準(zhǔn)確的性能數(shù)據(jù)或解決性能問題,本文就詳細(xì)的介紹一下MySQL8 臨時(shí)關(guān)閉緩存的方法實(shí)現(xiàn),感興趣的可以了解一下
    2024-10-10
  • mysql 編碼設(shè)置命令

    mysql 編碼設(shè)置命令

    mysql 編碼設(shè)置命令,需要的朋友可以參考下。
    2009-10-10

最新評(píng)論