mysql 中的 acid 包含原子性、一致性、隔離性和持久性。原子性確保事務(wù)要么全部成功要么全部失敗;一致性保證事務(wù)前后數(shù)據(jù)庫(kù)狀態(tài)保持一致;隔離性使并發(fā)事務(wù)互不影響;持久性確保提交的修改永久保存。
MySQL 中的 ACID
什么是 ACID
ACID 是數(shù)據(jù)庫(kù)事務(wù)的四大特性,分別為原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
原子性
原子性指事務(wù)是一個(gè)不可分割的單位,要么全部執(zhí)行成功,要么全部失敗。在事務(wù)執(zhí)行過(guò)程中,即使發(fā)生錯(cuò)誤,數(shù)據(jù)庫(kù)也不會(huì)處于中間狀態(tài)。
一致性
一致性指事務(wù)執(zhí)行前后,數(shù)據(jù)庫(kù)狀態(tài)保持一致。事務(wù)開(kāi)始時(shí),數(shù)據(jù)庫(kù)處于一致?tīng)顟B(tài),事務(wù)結(jié)束時(shí),數(shù)據(jù)庫(kù)仍然處于一致?tīng)顟B(tài)。
隔離性
隔離性指并發(fā)事務(wù)之間互不影響。每個(gè)事務(wù)都認(rèn)為自己是獨(dú)立執(zhí)行的,不受其他事務(wù)的影響。
持久性
持久性指一旦事務(wù)提交,其對(duì)數(shù)據(jù)庫(kù)的修改將永久保存,即使系統(tǒng)崩潰或出現(xiàn)故障。
MySQL 中的 ACID
MySQL 支持事務(wù),并遵循 ACID 特性。
原子性:MySQL 使用 redo 日志和 undo 日志來(lái)保證原子性。redo 日志記錄事務(wù)執(zhí)行的變更,undo 日志記錄事務(wù)執(zhí)行前的狀態(tài)。當(dāng)事務(wù)提交時(shí),redo 日志將變更應(yīng)用到數(shù)據(jù)庫(kù),確保事務(wù)不可分割。
一致性:MySQL 使用約束(如外鍵約束)和觸發(fā)器來(lái)維護(hù)一致性。約束確保數(shù)據(jù)符合預(yù)定義的規(guī)則,觸發(fā)器在特定事件發(fā)生時(shí)執(zhí)行自動(dòng)操作,以保持?jǐn)?shù)據(jù)庫(kù)的完整性。
隔離性:MySQL 使用鎖機(jī)制來(lái)實(shí)現(xiàn)隔離性。當(dāng)事務(wù)訪問(wèn)數(shù)據(jù)時(shí),會(huì)對(duì)數(shù)據(jù)加鎖,防止其他事務(wù)并發(fā)修改相同的數(shù)據(jù)。
持久性:MySQL 將事務(wù)提交的修改寫入 redo 日志和數(shù)據(jù)文件。即使系統(tǒng)崩潰,重啟后也可以從日志中恢復(fù)提交的更改。