MySQL:TCL(事務(wù)控制語言)

1. 什么是事務(wù):

一個(gè)或一組sql語句組成一個(gè)執(zhí)行單元,這個(gè)執(zhí)行單元要么全部執(zhí)行,要么全部不執(zhí)行

2. 事務(wù)的ACID屬性:

  • 原子性:事務(wù)是一個(gè)不可分割的工作單位歌溉,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生
  • 一致性:事務(wù)必須使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變換到另外一個(gè)一致性狀態(tài)
  • 隔離性:一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾骑晶,即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的痛垛,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾
  • 持久性:一個(gè)事務(wù)一旦被提交,它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的透罢,接下來的其他操作和數(shù)據(jù)庫故障不應(yīng)該對(duì)其有任何影響

3. 分類:

  • 隱式事務(wù):事務(wù)沒有明顯的開啟和結(jié)束的標(biāo)記(比如insert榜晦,update,delete語句)
  • 顯式事務(wù):事務(wù)具有明顯的開啟和結(jié)束的標(biāo)記(autocommit變量設(shè)置為0)
SHOW VARIABLES LIKE 'autocommit' ;
SET autocommit = 0 ;

4. 事務(wù)的使用步驟

  • 開啟事務(wù)
-- 默認(rèn)開啟事務(wù)
SET autocommit = 0 ;
 -- 可以不寫
START TRANSACTION ;
  • 編寫SQL語句(增刪改查)
  • 結(jié)束事務(wù)
-- 提交事務(wù)
COMMIT ;
-- 回滾事務(wù)
ROLLBACK ;

5. 事務(wù)的使用演示

SET autocommit = 0 ;

UPDATE 
  `account` 
SET
  `balance` = `balance` - 9900 
WHERE `username` = '費(fèi)渡' ;

UPDATE 
  `account` 
SET
  `balance` = `balance` + 9900 
WHERE `username` = '駱聞舟' ;

COMMIT ;

delete支持回滾羽圃,但truncate不支持

6. 事務(wù)的隔離級(jí)別

同時(shí)運(yùn)行多個(gè)事務(wù)可能會(huì)產(chǎn)生的并發(fā)問題

  • 臟讀:T2修改了數(shù)據(jù)但是還沒有提交乾胶,此時(shí)T1讀取到的數(shù)據(jù)是T2操作后的臨時(shí)數(shù)據(jù),如果此時(shí)T2回滾朽寞,那么T1讀取到的數(shù)據(jù)就是錯(cuò)誤的
  • 不可重復(fù)讀:T1讀取了一個(gè)數(shù)據(jù)识窿,之后T2對(duì)該數(shù)據(jù)做了修改,此時(shí)如果T1再進(jìn)行讀取脑融,讀取到的數(shù)據(jù)就和之前不同
  • 幻讀:T1從表中讀取了部分字段喻频,然后T2在表中插入了一些行,此時(shí)如果T1再進(jìn)行讀取肘迎,讀取到的數(shù)據(jù)就會(huì)比原來多出幾行

四種隔離級(jí)別

  • READ UNCOMMITED:允許事務(wù)讀取未被其他事務(wù)提交的變更(三種問題都無法避免)
  • READ COMMITED:只允許事務(wù)讀取已經(jīng)被其他事務(wù)提交的變更(只能避免臟讀)
  • REPEATABLE READ:確保事務(wù)可以多次從一個(gè)字段中讀取相同的值甥温,在這個(gè)事務(wù)持續(xù)期間锻煌,禁止其他事務(wù)對(duì)這個(gè)字段進(jìn)行更新(幻讀依然存在)
  • SERIALIZABLE:確保事務(wù)可以從一個(gè)表中讀取相同的行,在這個(gè)事務(wù)持續(xù)期間姻蚓,禁止其他事務(wù)對(duì)該表執(zhí)行增刪改操作(可以解決所有問題宋梧,但是效率較低)

隔離級(jí)別演示

-- 查看當(dāng)前的事務(wù)隔離級(jí)別
select @@tx_isolation;
-- 設(shè)置當(dāng)前連接事務(wù)的隔離級(jí)別
set session transaction isolation level read uncommitted;
-- 設(shè)置數(shù)據(jù)庫系統(tǒng)的全局的隔離級(jí)別
set global transaction isolation level read committed ;

7. savepoint的使用

SET autocommit = 0 ;
START TRANSACTION ;

DELETE 
FROM
  `account` 
WHERE id = 1 ;

SAVEPOINT a ;

DELETE 
FROM
  `account` 
WHERE id = 2 ;

ROLLBACK TO a ;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狰挡,隨后出現(xiàn)的幾起案子捂龄,更是在濱河造成了極大的恐慌,老刑警劉巖加叁,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倦沧,死亡現(xiàn)場離奇詭異,居然都是意外死亡它匕,警方通過查閱死者的電腦和手機(jī)展融,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來超凳,“玉大人愈污,你說我怎么就攤上這事÷职” “怎么了暂雹?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長创夜。 經(jīng)常有香客問我杭跪,道長,這世上最難降的妖魔是什么驰吓? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任涧尿,我火速辦了婚禮,結(jié)果婚禮上檬贰,老公的妹妹穿的比我還像新娘姑廉。我一直安慰自己,他們只是感情好翁涤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布桥言。 她就那樣靜靜地躺著,像睡著了一般葵礼。 火紅的嫁衣襯著肌膚如雪号阿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天鸳粉,我揣著相機(jī)與錄音扔涧,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛枯夜,可吹牛的內(nèi)容都是我干的弯汰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼卤档,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼蝙泼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劝枣,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎织鲸,沒想到半個(gè)月后舔腾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搂擦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年稳诚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瀑踢。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扳还,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橱夭,到底是詐尸還是另有隱情氨距,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布棘劣,位于F島的核電站俏让,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茬暇。R本人自食惡果不足惜首昔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糙俗。 院中可真熱鬧勒奇,春花似錦、人聲如沸巧骚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽网缝。三九已至巨税,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粉臊,已是汗流浹背草添。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扼仲,地道東北人远寸。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓抄淑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驰后。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肆资,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344