談談資料庫事務

2021-10-24 14:38:15 字數 952 閱讀 9770

首先事務用一句簡單的話來說,事務就是邏輯上的操作,要麼都執行要麼都不執行。如最常見的轉賬。那麼事務是如何來保證這種操作的呢?

一、事務的acid

原子性:事務視為乙個整體要麼全部成功要麼全部失敗。

以轉賬為例子:在事務中的扣款和價款兩條語句。在資料庫管理系統中,預設情況下一條sql就是乙個單獨的事務,事務是自動提交的。只有顯示的使用start transaction開啟乙個事務,才能將乙個**塊放在事務中執行。保障事務原子性是資料庫管理系統的責任,為此許多資料來源採用日誌機制。例如:sql server使用乙個預習事務日誌,在將資料提交到直接頁面前,先寫在事務日誌上。

一致性:指在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。這是說資料庫事務不能破壞關係資料的完整性以及業務邏輯上的一致性。

以轉賬為例:不管事務成功或者失敗,應該保證事務結束後兩賬戶和為2000。

資料庫層面的一致性,在乙個事務執行前後,資料會符合你設定的約束(唯一約束、外來鍵約束、check約束等)和觸發器設定。

隔離性:多個事務併發訪問時,事務之間是隔離的,乙個事務不應該影響其他事務的執行效果。

比如多個使用者同時往乙個賬戶轉賬,最後賬戶的結果應該和他們按先後次序轉賬的結果一樣。

永續性:一旦事務提交,則其所做的修改就會永久儲存到資料庫中。此時即使系統崩潰,修改的資料也不會丟失。

二、事務的隔離級別

讀未提交:乙個事務可以讀取另乙個未提交事務的資料。

讀已提交:乙個事務必須等到另乙個事務提交後才能讀取資料,避免髒讀。

可重複讀:在開始讀取資料時(事務開啟時),不允許再修改資料。避免髒讀,不可重複讀。

序列:最高事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀,不可重複讀和幻讀。但是效率極低,比較損耗資料庫效能,一般不用。

mysql預設隔離級別是可重複讀(可避免髒讀和不可重複讀,但是會出現幻讀)。

談談資料庫索引

索引是乙個單獨的 儲存在磁碟上的資料庫結構,他們包含對資料庫裡所有記錄的引用指標。或者索引是對資料庫表中一列或多列的值進行排序的一種結構。索引的作用 提高資料庫查詢的效率。索引支援hash和b tree結構 hash 可以快速的精確查詢,但是不支援範圍查詢。所以hash索引適用於等值查詢的場景,也就...

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...