事物的四大特性? ACID 1.原子性 atomicity 一個事物是一個不可分割的工作單位,其中的操作,要么都做,要么不做。不存在中間狀態。 2.一致性 consisitency 事物執行的前后,數據必須處於一種合法的狀態。(可以自己定義 ,保持數據的一致性。) 3.隔離性 lsolation 多個事物並發執行的時候,事物內部的操作與其他事物是隔離的,並發執行,互不干擾。 4.持久性 Durability 事物一旦提交,對數據庫的改變是永久性的。不受任何影響。 四大特性的實現原理? 1.mysql如何保證一致性的? 兩個層面。 /* 1.數據庫 通過原子性, 持久性,隔離性,來保證一致性。 AID 三大特性,是前提。 2.應用層面 通過代碼判斷數據庫數據是否有效,然后再決定是回滾還是提交數據。 */ 2.mysql怎怎么保證原子性的? /* 1.利用innodb的undo log。 叫做回滾的日志 當事務回滾的時候,能夠撤銷所有已經成功執行的SQL語句,需要記錄你要回滾的響應日志 2.舉例說明 當你update一條數據,需要記錄之前的舊值,回滾的時候,根據舊值進行update操作。 undo log 記錄了這些回滾需要的信息,當事務執行失敗,就可以以利undo log 中的信息 將數據回滾到修改之前的樣子。 */ 3.mysql怎么保持久性的? /* 1. 是利用innodb 的 redo log。、 mysql把磁盤上的數據加載到內存中,在內存中對數據進行修改,在刷回磁盤上。 此時宕機,內存中的數據就會丟失。 2.如何避免宕機? 在事物提交之前將數據寫入磁盤中。--------【引發的問題。】》只修改一個頁面里的一個字節,就要將整個頁面刷入磁盤,太浪費資源了 畢竟一個事務里的SQL可能牽涉到多個數據頁的修改,而這些數據頁可能不是相鄰的, 也就是屬於隨機IO。顯然操作隨機IO,速度會比較慢。 3.采用redo log? 做數據修改的時候,不僅在內村中操作,還會在redo log 中記錄這次操作, 提交事物的時候,會將redo log 日志進行刷盤 redo log 一部分在內存中,一部分在磁盤上。 數據庫宕機重啟,就將redo log中的內容恢復到數據庫中,再根據undo log 和binlog 內容決定 回滾還是提交數據。 4.好處? redo log 體積小,只記錄了那一頁修改了什么,體積小,刷盤快。 一直往末尾進行追加,屬於順序io.效率比隨機io來快。 */ 4.mysql怎么保證隔離性的。 /* 利用鎖 和mvcc 機制。 MVCC,即多版本並發控制(Multi Version Concurrency Control), 一個行記錄數據有多個版本對快照數據,這些快照數據在undo log中。 如果一個事務讀取的行正在做DELELE或者UPDATE操作, 讀取操作不會等行上的鎖釋放,而是讀取該行的快照版本。 在事務隔離級別為讀已提交(Read Commited)時,一個事務能夠讀到另一個事務已經提交的數據, 是不滿足隔離性的。但是當事務隔離級別為可重復讀(Repeateable Read)中,是滿足隔離性的。 */