一、資料庫的鎖(就講講主要的那幾個,拿去面試用就夠了)也就是 行鎖,表鎖,悲觀鎖,樂觀鎖。
【首先乙個很重要的問題 : 為什麼要鎖?】
就是為了防止併發操作的過程中,會發生多個事務對資料進行訪問修改等操作,若不加以控制,就會出現髒讀,不可重複讀, 幻讀,死鎖等情況,為了解決這個問題就有了鎖機制,簡單來說就是在一條sql語句執行時,會加上乙個鎖,在這個語句沒有執行完之前,其他事務不能對資料進行操作。、
【還有乙個問題 : 鎖的實現原理?】
(附加:
mysql以表級鎖為主,對資源鎖定的粒度很大,如果乙個session對乙個表加鎖時間過長,會讓其他session無法更新此表中的資料。雖然innodb引擎的表可以用行級鎖,但這個行級鎖的機制依賴於表的索引,如果表沒有索引,或者sql語句沒有使用索引,那麼仍然使用表級鎖。
oracle使用行級鎖,對資源鎖定的粒度要小很多,只是鎖定sql需要的資源,並且加鎖是在資料庫中的資料行上,不依賴與索引。所以oracle對並
發性的支援要好很多。)
行鎖:單獨的一行記錄加鎖。
表鎖:直接鎖定整張表,在你鎖定期間,其它程序無法對該錶進行寫操作。如果你是寫鎖,則其它程序則讀也不允許。
悲觀鎖:即對所有操作持悲觀態度,事務每次去運算元據的時候都假設有其他事務會修改需要訪問的資料,所以在訪問之前都要求上鎖。
樂觀鎖:反之,只是在進行更新修改操作的時候判斷一下在訪問的期間有沒有其他人修改資料
二、事務隔離的四個級別讀未提交,讀已提交,可重複讀,可序列化
四大特徵:
(1)原子性
事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。
(2)一致性
事務的一致性指的是在乙個事務執行之前和執行之後資料庫都必須處於一致性狀態。事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。
(3) 隔離性(關於事務的隔離性資料庫提供了多種隔離級別)
乙個事務的執行不能干擾其它事務。即乙個事務內部的操作及使用的資料對其它併發事務是隔離的,併發執行的各個事務之間不能互相干擾。
(4)永續性
事務完成之後,它對於資料庫中的資料改變是永久性的。該修改即使出現系統故障也將一
隔離級別:
隔離級別
髒讀(dirty read)
不可重複讀(nonerepeatable read)
幻讀(phantom read)
未提交讀(read uncommitted)
可能可能
可能已提交讀(read committed)
不可能可能
可能可重複讀(repeatable read)
不可能不可能
可能可序列化(serializable)
不可能不可能
不可能髒讀:乙個事務訪問資料,對資料進行修改未提交,而另乙個事務訪問,使用了這個資料,讀取的這個資料就稱為髒資料。
不可重複讀:乙個事務a多次讀取資料,假設在第一次讀取資料的過程中,另乙個事務b修改了資料,導致a兩次讀取的資料不一致。
幻讀:事務a對資料進行了修改操作,同時事務b對資料進行了插入操作,事務a查詢時會發現還有一條未修改的資料,就跟幻象一樣。
資料庫事物的四大特性
事物 transaction 是由一些列操作序列構成的執行單元,這些單元要麼都做,要麼不做,是乙個不可分割的工作單元。資料庫事物的四個基本性質 acid 1.原子性 atomicity 指的是事物中包含的所有操作要麼全做,要麼全不做 all or none 2.一致性 consistency 在事物...
資料庫 四大隔離級別
資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committed repeatable read serializable。在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀 髒讀 指當乙個事務正在訪問資料,並且對資料進行了修改,而這種資料還沒有提交到資料庫中...
資料庫事物四大特性 ACID
事務的 原子性 一致性 分離性 永續性 事物 transaction 是由一些列操作序列構成的執行單元,這些單元要麼都做,要麼不做,是乙個不可分割的工作單元。資料庫事物的四個基本性質 acid 1.原子性 atomicity 指的是事物中包含的所有操作要麼全做,要麼全不做 all or none 2...