1. 什么是事務?
事務是邏輯上的一組操作,這些操作是作為一個整體來執行的;如果其中任何一個操作失敗,則整個事務都將回滾,即還原到操作前的狀態。
2.事務具有四個特征ACID
a)原子性(Atomicity)
?整個事務中的所有操作,必須作為一個單元全部完成(或全部取消)。
b)一致性(Consistency)
?在事務開始之前與結束之后,數據庫都保持一致狀態。
c)隔離性(Isolation)
?一個事務不會影響其他事務的運行。
d)持續性/持久性(Durability)
?在事務完成以后,該事務對數據庫所作的更改將持久地保存在數據庫之中,并不會被回滾。
3. 事務的隔離級別有哪些?
答:事務的隔離級別包括:讀未提交(Read Uncommitted)、讀已提交(Read Committed)、可重復讀(Repeatable Read)和串行化(Serializable)。不同的隔離級別在并發訪問情況下會表現出不同的行為。
4. 數據庫鎖有哪些類型?
答:數據庫鎖包括行級鎖、表級鎖和頁級鎖。在不同的場景下使用不同的鎖可以提高數據庫的并發性能。
5. 什么是死鎖?
答:死鎖是指兩個或兩個以上的事務都在等待一個資源而無法繼續執行的情況。這種情況下,每個事務都在等待另一個事務釋放資源,導致兩個事務都無法完成,進而導致系統無響應。為避免死鎖,通常需要應用鎖定策略來保障事務間的并發訪問。
6.數據庫中 臟讀、幻讀、不可重讀是什么意思?
臟讀、幻讀、不可重復讀是關系型數據庫中的并發控制問題,以下是它們的解釋:
- 臟讀(Dirty Read):一個事務讀取了另一個事務未提交的數據,如果另一個事務回滾,則原事務讀取的數據變為無效數據。比如,事務1開始讀取數據,事務2修改該數據并未提交,事務1讀取到的數據是無效的,因為事務1所讀取的數據實際上還沒有被提交到數據庫。
- 幻讀(Phantom Read):一個事務執行相同的查詢條件兩次返回不同的結果。比如,事務1執行一個SELECT語句,并按條件排列返回結果集,事務2對表中的數據插入一些新的行,此時,事務1再次執行相同的SELECT語句,結果集不同,因為新插入的行被排在了前面。
- 不可重復讀(Non-repeatable Read):一個事務執行相同的查詢條件兩次返回不同的結果。這與幻讀類似,但幻讀指的是新增或刪除數據引起的不一致,而不可重復讀則是修改數據引起的不一致。
這些問題都與并發事務有關。并發事務意味著多個事務同時訪問同一個資源,比如數據庫中的數據。為了解決并發事務帶來的問題,數據庫提供了鎖機制,通過加鎖和釋放鎖來控制并發訪問。