14)mysql事務(wù)

  • 什么是事務(wù)
    事務(wù)是數(shù)據(jù)庫執(zhí)行操作的最小單元
    事務(wù)可以有一個(gè)sql組成,也可以由多個(gè)sql組成
    組成事務(wù)的sql要么全執(zhí)行成功温兼,要么全執(zhí)行失敗
事務(wù)的語法

START TRANSACTION / BEGIN
      SELECT ...
      UPDATE ...
      INSERT ...

COMMIT / ROLLBACK

用start transaction 或者 begin 開始一個(gè)事務(wù)
中間只能是dml語句栏账,增刪改查
commit:提交1個(gè)事務(wù)
rollback:回滾1個(gè)事務(wù)


  • 為什么要有事務(wù)

允許多個(gè)人同時(shí)操作相同得數(shù)據(jù)帖族,是為了增強(qiáng)數(shù)據(jù)庫的并發(fā)性,并發(fā)能帶給更大的吞吐量挡爵,更優(yōu)的資源利用率和更好的性能
但并發(fā)也會(huì)帶來問題竖般,比如多個(gè)用戶同時(shí)修改數(shù)據(jù)時(shí),容易破壞數(shù)據(jù)的一致性茶鹃,為了解決并發(fā)帶來的資源爭用和一致性問題涣雕,mysql提供了事務(wù)功能和基于鎖的多版本控制機(jī)制

  • persist:修改后對(duì)當(dāng)前的session和所有連接到mysql中的新連接都有效,且在mysql重啟后也不會(huì)丟失

  • global:修改后只會(huì)對(duì)新的連接到mysql的連接有效闭翩,且mysql重啟后挣郭,做的修改會(huì)丟失

  • session:(對(duì)開發(fā)人員來說是最常使用的)只會(huì)影響到當(dāng)前的連接,當(dāng)連接斷開后疗韵,所做的修改就會(huì)失效

將事務(wù)設(shè)置為SERIALIZABLE的示例

serializable
如上圖示兑障,在串行化事務(wù)隔離級(jí)別中,只有第一個(gè)事務(wù)提交或回滾后蕉汪,第二個(gè)事務(wù)才能執(zhí)行流译。
事務(wù)2修改后滿足事務(wù)1的查詢條件,只有等待事務(wù)1先執(zhí)行完者疤。
如果事務(wù)2修改后不滿足事務(wù)1的查詢條件福澡,則不會(huì)被卡住(如操作的是不同表)

其他的不一一測試


鎖的類型
共享鎖:其他事務(wù)只能對(duì)他讀取和加共享鎖驹马,而無法修改
排他鎖:只能由加排他鎖的事務(wù)讀取和修改革砸,其他數(shù)據(jù)無法讀取和修改,也無法加鎖

加鎖就有可能造成阻塞和死鎖
  • 什么是阻塞
    由于不同鎖之間的兼容關(guān)系糯累,造成的一事務(wù)需要等待另一事務(wù)釋放所占資源的現(xiàn)象
'如何發(fā)現(xiàn)阻塞算利,該表記錄了所有innodb所有等待事件'
SELECT waiting_pid AS 'block pid',  -- 被阻塞的進(jìn)程,進(jìn)程ID
    waiting_query AS 'block SQL',  -- 被阻塞的命令
    blocking_pid AS 'running pid',  -- 誰阻塞了后面寇蚊,在運(yùn)行的進(jìn)程笔时,進(jìn)程ID
    blocking_query AS 'running SQL',  -- 在運(yùn)行id的sql
    wait_age AS 'blocked time',       -- 阻塞多久了
    sql_kill_blocking_query AS 'info'  -- 如何解決阻塞的建議
FROM sys.innodb_lock_waits
WHERE (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(wait_started))>30  -- 單位秒
  • 如何處理阻塞
    1.終止占用資源的事務(wù)
    2.優(yōu)化占用資源的sql,使其盡快釋放資源

  • 什么是死鎖
    死鎖:并行執(zhí)行的多個(gè)事務(wù)之間占有了對(duì)方所需要的資源仗岸。
    mysql內(nèi)部會(huì)自動(dòng)監(jiān)控死鎖允耿,主動(dòng)回滾某個(gè)事務(wù),回滾的原則是回滾占用資源少的事務(wù)來解死鎖扒怖,這過程不需要人為干預(yù)
    死鎖雖然不會(huì)卡住较锡,但有時(shí)會(huì)對(duì)業(yè)務(wù)造成影響,如某個(gè)sql盗痒,有時(shí)執(zhí)行成功蚂蕴,有時(shí)失敗低散,可能就是死鎖造成的

set global innodb_print_all_deadlocks=on;
死鎖信息記錄在mysql的錯(cuò)誤日志中的開關(guān)

如有2個(gè)mysql事務(wù),事務(wù)1要修改 id 為10的title,score骡楼,事務(wù)2要修改 id 為10的 score,title
事務(wù)1執(zhí)行完修改title熔号,score還沒執(zhí)行,此時(shí)title資源被事務(wù)1占用
事務(wù)2執(zhí)行完修改score鸟整,title還沒執(zhí)行引镊,此時(shí)score資源被事務(wù)2占用
下次事務(wù)1和事務(wù)要修改的資源被彼此占用,就會(huì)形成死鎖

如前面的事務(wù)1和事務(wù)2篮条,讓雙方修改數(shù)據(jù)的順序相同弟头,比如都是先修改title,再修改score涉茧,這樣這些事務(wù)都是按相同的順序占有資源赴恨,后面的事務(wù)不會(huì)占有前面事務(wù)后續(xù)要修改的資源,只會(huì)產(chǎn)生阻塞伴栓,不會(huì)產(chǎn)生死鎖伦连,只要前面的事務(wù)執(zhí)行夠快,就只會(huì)阻塞很短的時(shí)間

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挣饥,一起剝皮案震驚了整個(gè)濱河市除师,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扔枫,老刑警劉巖汛聚,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異短荐,居然都是意外死亡倚舀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門忍宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痕貌,“玉大人,你說我怎么就攤上這事糠排《娉恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵入宦,是天一觀的道長哺徊。 經(jīng)常有香客問我,道長乾闰,這世上最難降的妖魔是什么落追? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涯肩,結(jié)果婚禮上轿钠,老公的妹妹穿的比我還像新娘巢钓。我一直安慰自己,他們只是感情好疗垛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布症汹。 她就那樣靜靜地躺著,像睡著了一般继谚。 火紅的嫁衣襯著肌膚如雪烈菌。 梳的紋絲不亂的頭發(fā)上阵幸,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天花履,我揣著相機(jī)與錄音,去河邊找鬼挚赊。 笑死诡壁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荠割。 我是一名探鬼主播妹卿,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼蔑鹦!你這毒婦竟也來了夺克?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤嚎朽,失蹤者是張志新(化名)和其女友劉穎铺纽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哟忍,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狡门,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锅很。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片其馏。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爆安,靈堂內(nèi)的尸體忽然破棺而出叛复,到底是詐尸還是另有隱情,我是刑警寧澤扔仓,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布褐奥,位于F島的核電站,受9級(jí)特大地震影響当辐,放射性物質(zhì)發(fā)生泄漏抖僵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一缘揪、第九天 我趴在偏房一處隱蔽的房頂上張望耍群。 院中可真熱鬧义桂,春花似錦、人聲如沸蹈垢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曹抬。三九已至溉瓶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谤民,已是汗流浹背堰酿。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留张足,地道東北人触创。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像为牍,于是被迫代替她去往敵國和親哼绑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • --- layout: post title: "如果有人問你關(guān)系型數(shù)據(jù)庫的原理碉咆,叫他看這篇文章(轉(zhuǎn))" date...
    藍(lán)墜星閱讀 793評(píng)論 0 3
  • 今天看到一位朋友寫的mysql筆記總結(jié)抖韩,覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下疫铜,供大家參考下茂浮,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,734評(píng)論 0 30
  • 一弃甥、MySQL優(yōu)化 MySQL優(yōu)化從哪些方面入手: (1)存儲(chǔ)層(數(shù)據(jù)) 構(gòu)建良好的數(shù)據(jù)結(jié)構(gòu)扶供《忻担可以大大的提升我們S...
    寵辱不驚丶?xì)q月靜好閱讀 2,438評(píng)論 1 8
  • 什么是數(shù)據(jù)庫彤悔? 數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序替裆。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API恍箭,用于創(chuàng)建衡未,訪問晚顷,管理...
    chen_000閱讀 4,036評(píng)論 0 19
  • ――這是我有生以來看到的最大的場面庞呕。妻說新翎。 我和妻通電話。開始聊天氣住练,前幾天天氣挺好的地啰。慶叔下葬的那天真暖和,我們...
    許蝕閱讀 202評(píng)論 0 0