事務(wù)是一個(gè)或多個(gè) SQL 語(yǔ)句組成的一個(gè)執(zhí)行單元,這些 SQL 語(yǔ)句要么全部執(zhí)行成功,要么全部不執(zhí)行,不會(huì)出現(xiàn)部分執(zhí)行的情況。事務(wù)是數(shù)據(jù)庫(kù)管理系統(tǒng)執(zhí)行過(guò)程中的一個(gè)邏輯單位,由一個(gè)有限的數(shù)據(jù)庫(kù)操作序列構(gòu)成。
事務(wù)的主要作用是保證數(shù)據(jù)庫(kù)操作的一致性,即事務(wù)內(nèi)的操作,要么全部成功,要么全部失敗回滾,不會(huì)出現(xiàn)中間狀態(tài)。這對(duì)于維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性非常重要。
事務(wù)具有四個(gè)基本特性,也就是通常所說(shuō)的 ACID 特性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
什么是原子性?
原子性子性意味著事務(wù)中的所有操作要么全部完成,要么全部不完成,它是不可分割的單位。如果事務(wù)中的任何一個(gè)操作失敗了,整個(gè)事務(wù)都會(huì)回滾到事務(wù)開(kāi)始之前的狀態(tài),如同這些操作從未被執(zhí)行過(guò)一樣。
什么是一致性?
一致性確保事務(wù)從一個(gè)一致的狀態(tài)轉(zhuǎn)換到另一個(gè)一致的狀態(tài)。
比如在銀行轉(zhuǎn)賬事務(wù)中,無(wú)論發(fā)生什么,轉(zhuǎn)賬前后兩個(gè)賬戶的總金額應(yīng)保持不變。假如 A 賬戶(100 塊)給 B 賬戶(10 塊)轉(zhuǎn)了 10 塊錢(qián),不管成功與否,A 和 B 的總金額都是 110 塊。
什么是隔離性?
隔離性意味著并發(fā)執(zhí)行的事務(wù)是彼此隔離的,一個(gè)事務(wù)的執(zhí)行不會(huì)被其他事務(wù)干擾。就是事務(wù)之間是井水不犯河水的。
隔離性主要是為了解決事務(wù)并發(fā)執(zhí)行時(shí)可能出現(xiàn)的問(wèn)題,如臟讀、不可重復(fù)讀、幻讀等。
數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)事務(wù)隔離級(jí)別(如讀未提交、讀已提交、可重復(fù)讀、串行化)來(lái)實(shí)現(xiàn)事務(wù)的隔離性。
什么是持久性?
持久性確保事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)所做的更改就是永久性的,即使發(fā)生系統(tǒng)崩潰,數(shù)據(jù)庫(kù)也能恢復(fù)到最近一次提交的狀態(tài)。通常,持久性是通過(guò)數(shù)據(jù)庫(kù)的恢復(fù)和日志機(jī)制來(lái)實(shí)現(xiàn)的,確保提交的事務(wù)更改不會(huì)丟失。
簡(jiǎn)短一點(diǎn)的回答可以是:
- 原子性:事務(wù)的所有操作要么全部提交成功,要么全部失敗回滾,對(duì)于一個(gè)事務(wù)中的操作不能只執(zhí)行其中一部分。
- 一致性:事務(wù)應(yīng)確保數(shù)據(jù)庫(kù)的狀態(tài)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變?yōu)榱硪粋€(gè)一致?tīng)顟B(tài)。一致性與業(yè)務(wù)規(guī)則有關(guān),比如銀行轉(zhuǎn)賬,不論事務(wù)成功還是失敗,轉(zhuǎn)賬雙方的總金額應(yīng)該是不變的。
- 隔離性:多個(gè)并發(fā)事務(wù)之間需要相互隔離,即一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。
- 持久性:一旦事務(wù)提交,則其所做的修改將永久保存到數(shù)據(jù)庫(kù)中。即使發(fā)生系統(tǒng)崩潰,修改的數(shù)據(jù)也不會(huì)丟失。
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-855359.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-855359.html
到了這里,關(guān)于【面試題】MySQL 事務(wù)的四大特性說(shuō)一下?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!