mysql 事務(wù)

事務(wù)由一組sql語(yǔ)句組成
事務(wù)的sql語(yǔ)句整體成功,整體失敗

A:100 B:0-> A:0 B:100
-- A轉(zhuǎn)賬B
update 賬戶(hù) set money=money-100
where id='A';
update 賬戶(hù) set money=money+100
where id='B';
-- 轉(zhuǎn)賬要么同時(shí)成功,要么同時(shí)失敗(只要有一個(gè)失敗就)回到轉(zhuǎn)賬執(zhí)行之前的狀態(tài)

數(shù)據(jù)操作的最小單元是事務(wù),而不是sql語(yǔ)句

事務(wù)的操作

不啟動(dòng)事務(wù)是單條的sql語(yǔ)句的成功與失敗(某條sql語(yǔ)句失敗,前面的操作不恢復(fù))
啟動(dòng)事務(wù)后,執(zhí)行sql語(yǔ)句,中間某條sql語(yǔ)句失敗,它前面的操作還可恢復(fù),這種恢復(fù)以前的狀態(tài)叫回滾,回滾到事務(wù)之前。
啟動(dòng)事務(wù)
begin

start transaction
事務(wù)啟動(dòng)后,執(zhí)行的增刪改操作,會(huì)暫時(shí)記錄在一個(gè)日志文件中(臨時(shí)記錄)。
提交事務(wù)
commit
提交事務(wù)后,事務(wù)日志中的記錄數(shù)據(jù)操作在數(shù)據(jù)表中生效,并清空日志文件。
回滾事務(wù)
rollback
直接清空日志

commit用法

rollback用法

事務(wù)的特性
A——原子性Atomic
數(shù)據(jù)操作的最小單元是事務(wù),而不是sql語(yǔ)句
C——致性Consistency
一致性,事務(wù)完成前后,數(shù)據(jù)要保持邏輯的一致性

A+B=100轉(zhuǎn)賬前
A+B=100轉(zhuǎn)賬后

I——隔離性Isolation
一個(gè)事務(wù)操作時(shí),其他事務(wù)要等待。
一個(gè)事務(wù)修改數(shù)據(jù),另一個(gè)事務(wù)不能修改,這兩個(gè)事務(wù)要進(jìn)行隔離。
事務(wù)并不是完全隔離的(效率低),數(shù)據(jù)庫(kù)為了兼顧并發(fā)性和數(shù)據(jù)安全,一定程度上允許事務(wù)并發(fā)執(zhí)行,并設(shè)置了隔離的級(jí)別。
D——Durancy
持久性,事務(wù)成功,數(shù)據(jù)被永久的保存

數(shù)據(jù)訪問(wèn)沖突的問(wèn)題

多個(gè)事務(wù)同時(shí)執(zhí)行,可能引發(fā)三種數(shù)據(jù)訪問(wèn)沖突問(wèn)題:
1.臟數(shù)據(jù)
2.不可重復(fù)讀
3.幻覺(jué)讀

1.臟數(shù)據(jù)
一個(gè)事務(wù)未提交的數(shù)據(jù)(臨時(shí)保存在內(nèi)存文件中,表里還沒(méi)保存,有可能在未來(lái)失效)(或者修改數(shù)據(jù),沒(méi)修改完),被另一個(gè)事務(wù)查詢(xún)到
2.不可重復(fù)讀
數(shù)據(jù)每次讀取的結(jié)果一致叫可重復(fù)讀。
針對(duì)數(shù)據(jù)修改的update操作
查詢(xún)過(guò)的數(shù)據(jù)(數(shù)據(jù)被別的事務(wù)修改并提交了)再次查詢(xún)時(shí),與之前的查詢(xún)結(jié)果不一致
3.幻覺(jué)讀
針對(duì)數(shù)據(jù)的插入和刪除操作:
新插入的數(shù)據(jù),查詢(xún)不到
刪除的數(shù)據(jù),能查詢(xún)到(看到不該看的東西)

隔離級(jí)別
為了避免數(shù)據(jù)訪問(wèn)沖突問(wèn)題,避免數(shù)據(jù)的混亂,數(shù)據(jù)庫(kù)會(huì)讓事務(wù)進(jìn)行隔離(別讓事務(wù)同時(shí)執(zhí)行,保證數(shù)據(jù)安全)
為了兼顧數(shù)據(jù)安全和性能數(shù)據(jù)庫(kù)提供了四種隔離級(jí)別
級(jí)別越高越安全,性能越差
級(jí)別越低越不安全,性能越高

mysql設(shè)置隔離級(jí)別

set tx_isolation='read-uncommitted';

1.未提交可讀-臟讀,不可重復(fù)讀,幻覺(jué)讀

set tx_isolation='read-committed';

2.提交可讀-不可重復(fù)讀,幻覺(jué)讀

 set tx_isolation='repeatable-read'; --默認(rèn)級(jí)別

3.可重復(fù)讀-幻覺(jué)讀(默認(rèn)級(jí)別,最佳選擇)

set tx_isolation='serialiable';

4.串行化-排列執(zhí)行(級(jí)別最高)

read-uncommitted

這樣導(dǎo)致了臟讀


read-committed

這樣導(dǎo)致了不可重復(fù)讀


repeatable-read

這樣導(dǎo)致了幻覺(jué)讀,新插入的數(shù)據(jù)看不到
repeatable-read

這樣導(dǎo)致了幻覺(jué)讀,假更新了刪除的數(shù)據(jù),commit后才發(fā)現(xiàn)數(shù)據(jù)早就被刪除了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 事務(wù)的定義 事務(wù)由單獨(dú)單元的一個(gè)或多個(gè)SQL語(yǔ)句組成,在這個(gè)單元中,每個(gè)MySQL語(yǔ)句是相互依賴(lài)的。而整個(gè)單獨(dú)單元...
    諸葛堅(jiān)強(qiáng)閱讀 1,193評(píng)論 0 3
  • 來(lái)源轉(zhuǎn)載自:http://www.cnblogs.com/ymy124/p/3718439.html MySQL的...
    Mrwangs閱讀 2,015評(píng)論 0 8
  • 1、 數(shù)據(jù)庫(kù)事務(wù)的概念 在數(shù)據(jù)庫(kù)中,所謂事務(wù)是指一組邏輯操作單元,使數(shù)據(jù)從一種狀態(tài)變換到另一種狀態(tài)。 為確保數(shù)據(jù)庫(kù)...
    AKyS佐毅閱讀 320評(píng)論 0 2
  • 人心向善,明天要回家了,我媽昨天打電話過(guò)來(lái)說(shuō)要帶盒尿布回家,怕又忘記了,從復(fù)一遍,
    螞蟻背象閱讀 179評(píng)論 0 0
  • 我近期最想實(shí)現(xiàn)的一個(gè)愿望或目標(biāo)是:看到兒子中考超常發(fā)揮,身心愉悅地跨入重點(diǎn)高中二中。所以我的咖啡冥想內(nèi)容: 今天早...
    葉景芳閱讀 150評(píng)論 0 0

友情鏈接更多精彩內(nèi)容