事務指的是滿足 acid 特性的一組操作,可以通過 commit 提交乙個事務,也可以使用 rollback 進行回滾。
事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾。
回滾可以用回滾日誌來實現,回滾日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可。
資料庫在事務執行前後都保持一致性狀態。在一致性狀態下,所有事務對乙個資料的讀取結果都是相同的。
乙個事務所做的修改在最終提交以前,對其它事務是不可見的。
一旦事務提交,則其所做的修改將會永遠儲存到資料庫中。即使系統發生崩潰,事務執行的結果也不能丟失。
使用重做日誌來保證永續性。
在併發環境下,事務的隔離性很難保證,因此會出現很多併發一致性問題。
t1 和 t2 兩個事務都對乙個資料進行修改,t1 先修改,t2 隨後修改,t2 的修改覆蓋了 t1 的修改。
t1 修改乙個資料,t2 隨後讀取這個資料。如果 t1 撤銷了這次修改,那麼 t2 讀取的資料是髒資料。
t2 讀取乙個資料,t1 對該資料做了修改。如果 t2 再次讀取這個資料,此時讀取的結果和第一次讀取的結果不同。
t1 讀取某個範圍的資料,t2 在這個範圍內插入新的資料,t1 再次讀取這個範圍的資料,此時讀取的結果和和第一次讀取的結果不同。
有以下兩個規定:
使用意向鎖(intention locks)可以更容易地支援多粒度封鎖。
在存在行級鎖和表級鎖的情況下,事務 t 想要對錶 a 加 x 鎖,就需要先檢測是否有其它事務對錶 a 或者表 a 中的任意一行加了鎖,那麼就需要對錶 a 的每一行都檢測一次,這是非常耗時的。
意向鎖在原來的 x/s 鎖之上引入了 ix/is,ix/is 都是表鎖,用來表示乙個事務想要在表中的某個資料行上加 x 鎖或 s 鎖。有以下兩個規定:
通過引入意向鎖,事務 t 想要對錶 a 加 x 鎖,只需要先檢測是否有其它事務對錶 a 加了 x/ix/s/is 鎖,如果加了就表示有其它事務正在使用這個表或者表中某一行的鎖,因此事務 t 加 x 鎖失敗。
一級封鎖協議
事務 t 要修改資料 a 時必須加 x 鎖,直到 t 結束才釋放鎖。
可以解決丟失修改問題,因為不能同時有兩個事務對同乙個資料進行修改,那麼事務的修改就不會被覆蓋。
二級封鎖協議
在一級的基礎上,要求讀取資料 a 時必須加 s 鎖,讀取完馬上釋放 s 鎖。
可以解決讀髒資料問題,因為如果乙個事務在對資料 a 進行修改,根據 1 級封鎖協議,會加 x 鎖,那麼就不能再加 s 鎖了,也就是不會讀入資料。
**封鎖協議
在二級的基礎上,要求讀取資料 a 時必須加 s 鎖,直到事務結束了才能釋放 s 鎖。
可以解決不可重複讀的問題,因為讀 a 時,其它事務不能對 a 加 x 鎖,從而避免了在讀的期間資料發生改變。
加鎖和解鎖分為兩個階段進行。
可序列化排程是指,通過併發控制,使得併發執行的事務結果與某個序列執行的事務結果相同。
事務遵循兩段鎖協議是保證可序列化排程的充分條件。例如以下操作滿足兩段鎖協議,它是可序列化排程。
lock-x(a)...lock-s(b)...lock-s(c)...unlock(a)...unlock(c)...unlock(b)但不是必要條件,例如以下操作不滿足兩段鎖協議,但是它還是可序列化排程。
lock-x(a)...unlock(a)...lock-s(b)...unlock(b)...lock-s(c)...unlock(c)事務中的修改,即使沒有提交,對其它事務也是可見的。
乙個事務只能讀取已經提交的事務所做的修改。換句話說,乙個事務所做的修改在提交之前對其它事務是不可見的。
保證在同乙個事務中多次讀取同樣資料的結果是一樣的。
強制事務序列執行。
需要加鎖實現,而其它隔離級別通常不需要。
高階別正規化的依賴於低階別的正規化,1nf 是最低級別的正規化。
屬性不可分。
每個非主屬性完全函式依賴於鍵碼。
可以通過分解來滿足。
非主屬性不傳遞函式依賴於鍵碼。
資料庫系統 資料庫 資料庫管理系統 資料庫系統
繼續寫資料庫系統的文章,第二篇 資料庫 資料庫管理系統 資料庫系統。本文主要談談這三者之間的關係。下方,摘自老師的ppt,非原創。資料庫管理系統 從系統角度看資料庫管理系統 資料庫系統 資料庫指的是長期儲存在計算機內有組織的,大量的,相關聯的,可共享的資料集合。資料應當是有組織的,不應該是雜亂無章的...
資料庫原理 資料庫系統概述
資料庫 組織 儲存和管理資料的資料倉儲,這個倉庫是儲存在計算機儲存裝置上的。嚴格上講資料庫 是指長期儲存在計算機內的 有組織的 可共享的資料集合。資料庫中的資料按一定的資料模型組織 描述和儲存,具有較小的冗餘度 較高的資料獨立性和易擴充套件性,並為各種使用者共享。資料庫管理系統 是使用者和作業系統之...
資料庫系統mysql MySQL資料庫系統
1 mysql的特點 1 多執行緒 多使用者 2 基於c s 客戶端 伺服器 架構 3 簡單易用 查詢速度快 4 安全可靠 2 mysql編譯安裝 代表鍵盤上tab鍵 1 準備工作 解除安裝使用rpm方式安裝的mysql rpm e mysql nodeps 安裝cmake包 cd media ta...