本篇文章為大家展示了數據庫的事務(wù)指的是什么,內容簡(jiǎn)明扼要并且容易理解,絕對能使你眼前一亮,通過(guò)這篇文章的詳細介紹希望你能有所收獲。
一、什么是事務(wù)?
數據庫事務(wù)(Transaction)是訪(fǎng)問(wèn)并可能操作各種數據項的一個(gè)數據庫操作序列,這些操作要么全部執行,要么全部不執行,是一個(gè)不可分割的工作單位。事務(wù)由事務(wù)開(kāi)始與事務(wù)結束之間執行的全部數據庫操作組成。
例如:從A賬號給B賬號轉帳,對應于如下兩條sql語(yǔ)句 update from account set money=money+100 where name=‘b’; update from account set money=money-100 where name=‘a(chǎn)’;
這兩條update語(yǔ)句應該作為一個(gè)整體來(lái)運行,要保證同時(shí)成功,或者同時(shí)失??;不應該存在一個(gè)成功,一個(gè)失敗的情況。
二、數據庫開(kāi)啟事務(wù)命令
我們可以使用下面的語(yǔ)句來(lái)開(kāi)啟或者結束一個(gè)事務(wù)。
start transaction 開(kāi)啟事務(wù)
rollback 回滾事務(wù)
commit 提交事務(wù)
例如,我們可以把上面的銀行轉賬的update語(yǔ)句放到一個(gè)事務(wù)中執行。
start transaction; update from account set money=money+100 where name=‘b’; update from account set money=money-100 where name=‘a(chǎn)’; commit;
三、事務(wù)的特征:ACID
原子性(Atomicity):原子性是指事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中的操作要么都發(fā)生,要么都不發(fā)生。
一致性(Consistency):事務(wù)必須使數據庫從一個(gè)一致性狀態(tài)變換到另外一個(gè)一致性狀態(tài)。
隔離性(Isolation):事務(wù)的隔離性是多個(gè)用戶(hù)并發(fā)訪(fǎng)問(wèn)數據庫時(shí),數據庫為每一個(gè)用戶(hù)開(kāi)啟的事務(wù),不能被其他事務(wù)的操作數據所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。
持久性(Durability):持久性是指一個(gè)事務(wù)一旦被提交,它對數據庫中數據的改變就是永久性的,接下來(lái)即使數據庫發(fā)生故障也不應該對其有任何影響。
四、事務(wù)的隔離級別
多個(gè)線(xiàn)程開(kāi)啟各自事務(wù)操作數據庫中數據時(shí),數據庫系統要負責隔離操作,以保證各個(gè)線(xiàn)程在獲取數據時(shí)的準確性。
如果不考慮隔離性,可能會(huì )引發(fā)如下問(wèn)題:
臟讀:指一個(gè)事務(wù)讀取了另外一個(gè)事務(wù)未提交的數據。
不可重復讀:在一個(gè)事務(wù)內讀取表中的某一行數據,多次讀取結果不同。
虛讀(幻讀):是指在一個(gè)事務(wù)內讀取到了別的事務(wù)插入的數據,導致前后讀取不一致。
數據庫共定義了四種隔離級別:
Serializable:可避免臟讀、不可重復讀、虛讀情況的發(fā)生。(串行化) Repeatable read(MySQL的默認值):可避免臟讀、不可重復讀情況的發(fā)生。(可重復讀) Read committed:可避免臟讀情況發(fā)生(讀已提交)。 Read uncommitted:最低級別,以上情況均無(wú)法保證。(讀未提交)
我們可以可以通過(guò)下面的語(yǔ)句來(lái)查看MySQL的事務(wù)隔離級別和設置隔離級別:
set (GLOBAL|SESSION) transaction isolation level 設置事務(wù)隔離級別 select @@tx_isolation 查詢(xún)當前事務(wù)隔離級別
下面的語(yǔ)句將查看MySQL數據庫當前的事務(wù)隔離級別。
下面的語(yǔ)句將MySQL的事務(wù)隔離級別設置成read committed,在這種隔離級別下,將會(huì )發(fā)生臟讀的問(wèn)題。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站