資料庫相關知識整理(三)

2021-10-05 18:49:49 字數 2098 閱讀 6811

start transaction;

…… #一條或多條sql語句

commit;

其中start transaction標識事務開始,commit提交事務,將執行結果寫入到資料庫。如果sql語句執行出現問題,會呼叫rollback,回滾所有已經執行成功的sql語句。當然,也可以在事務中直接使用rollback語句進行回滾。 

事務(transaction)是由一系列對系統中資料進行訪問與更新的操作所組成的乙個程式執行邏輯單元。事務是dbms中最基礎的單位,事務不可分割。

事務具有4個基本特徵,分別是:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(duration),簡稱acid。

事務:是一系列的資料庫操作,是資料庫應用的基本邏輯單位。

事務特性:

1)原子性:事務被視為不可分割的最小單元,事物的所有操作要不成功,要不失敗回滾,而回滾可以通過日誌來實現,日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作。

2)一致性:資料庫在事務執行前後都保持一致性狀態,在一致性狀態下,應用系統從乙個正確的狀態到另乙個正確的狀態。

關於一致性

3)隔離性:乙個事務所做的修改在最終提交以前,對其他事務是可不見的。

4)永續性:一旦事務提交,則其所做的修改將會永遠儲存到資料庫中。

髒讀:髒讀是指在乙個事務處理過程裡讀取了另乙個未提交的事務中的資料。

不可重複讀:不可重複讀是指在對於資料庫中的某個資料,乙個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另乙個事務修改並提交了。

幻讀:幻讀是 a 事務讀取到 b 事務提交的新增資料,這時 a 事務將出現幻象讀的問題。

幻讀和不可重複讀是兩個容易混淆的概念,前者是指讀到了其他已經提交事務的新增資料,而後者是指讀到了已經提交了事務的更改資料(更改或刪除)。為了避免這種情況,採取的對策不相同:防止讀到更改資料,只需要對操作的資料新增行級鎖,阻止操作中的資料發生變化;而防止讀到新增資料,則往往需要新增表級鎖——將整張表鎖定,防止新增資料。

serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。

repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。

read committed (讀已提交):可避免髒讀的發生。

read uncommitted (讀未提交):最低級別,任何情況都無法保證。

悲觀鎖:也即悲觀併發控制,pessimistic concurrency controller,縮寫 pcc。悲觀鎖是指在資料處理過程,使資料處於鎖定狀態,一般使用資料庫的鎖機制實現。

悲觀鎖優缺點:悲觀併發控制(悲觀鎖)採用"先取鎖再分"的保守策略,為資料處理提供了安全的保證。但在效率方面,加鎖機制會產生額外的開銷,增加產生死鎖的機會。

樂觀鎖:相對悲觀鎖來說,樂觀鎖是通過記錄資料版本的方式實現樂觀鎖。為資料增加乙個版本標識,讀取資料時,將版本標識一起讀出,資料沒更新一次,就對版本標識進行更新。

樂觀鎖優缺點:樂觀鎖認為事務直接競爭的概率是很小的,在提交的時候才鎖定,所以不會產生死鎖。但是如果兩個事務同時讀取資料庫的某一行,這時,就會發現樂觀鎖的弊端。

行級鎖:行級鎖分為共享鎖和排它鎖。行級鎖是 mysql 中鎖定粒度最細的鎖。innodb引擎支援行級鎖和表級鎖,只有在通過索引條件檢索資料的時候,才使用行級鎖,否就使用表級鎖。行級鎖開銷大,加鎖慢,鎖定粒度最小,發生鎖衝突概率最低,併發度最高

表級鎖:表級鎖分為表共享鎖和表獨佔鎖。表級鎖開銷小,加鎖快,鎖定粒度大、發生鎖衝突最高,併發度最低

頁級鎖:頁級鎖是 mysql 中鎖定粒度介於行級鎖和表級鎖中間的一種鎖。表級鎖速度快,但衝突多,行級衝突少,但速度慢。

所以取了折衷的頁級,一次鎖定相鄰的一組記錄。bdb 支援頁級鎖。開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

排它鎖(exclusive locck) :排它鎖又叫寫鎖,如果事務 t 對 a 加上排它鎖,則其它事務都不能對 a 加任何型別的鎖。獲准排它鎖的事務既能讀資料,又能寫資料。

共享鎖(share lock) :共享鎖又叫讀鎖,如果事務 t 對 a 加上共享鎖,則其它事務只能對 a 再加共享鎖,不能加其它鎖。獲准共享鎖的事務只能讀資料,不能寫資料。

關於間隙鎖

資料庫相關知識整理(一)

即表中的列的具有原子性,不可再分解,即列的資訊,不能分解,只要資料庫是關係型資料庫 mysql oracle db2 sql server 就自動的滿足 1nf。資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性。通...

知識整理(三) Mysql 資料庫知識

1.myisam和innodb的區別?答 myisam不支援事務和行級鎖,而且其最大的缺陷在於資料庫崩潰後無法安全恢復。2.事務的四大特性 答 acid 原子性 事務是最小執行單元,要麼全部成功,要麼全部失敗。一致性 事務改變的資料,前後要一致。隔離性 併發操作時,當乙個事務在執行時,外界無法操作它...

資料庫相關理論知識整理複習

database management system dbms 資料庫管理系統是乙個為儲存和管理資料庫的軟體包。1 從資料模型的發展來看 2 從體系結構的發展來看 3 從應用領域的拓展來看 工程資料庫 cad,cam 演繹資料庫 知識庫,知識管理,需要推理過程 時態資料庫 空間資料庫 資料倉儲 資料...