數據庫之事務與鎖

一.事務的四個特性
1.原子性:事務作爲一個整體被執行,包含在其中的對數據庫的操作要麼全部被執行,要麼都不執行。
2.一致性:事務應確保數據庫的狀態從一個一致狀態轉變爲另一個一致狀態,一致狀態的含義是數據庫中的數據應滿足完整性約束。
3.隔離性:多個事務併發執行時,一個事務的執行不應影響其他事務的執行。
4.持久性:已被提交的事務對數據庫的修改應該永久保存在數據庫中。
二.事務沒有隔離性會怎麼樣呢?
1.髒讀:髒讀是指一個事務在處理數據的過程中,讀取到另一個未提交事務的數據。
2.不可重複讀:不可重複讀的重點是修改,同樣條件下兩次讀取結果不同,也就是說,被讀取的數據可以被其它事務修改;
3.幻讀:幻讀的重點在於新增或者刪除,同樣條件下兩次讀出來的記錄數不一樣。
三.數據庫的隔離級別
1.讀未提交:允許一個事務讀取另一個事務還沒提交的數據,這樣可能會提高性能,但是會導致髒讀問題。
2.讀提交:在一個事務中只允許對其它事務已經提交的記錄可見,防止髒讀。
3.不可重複讀:在一個事務開始後,其他事務對數據庫的修改在本事務中不可見,直到本事務提交或回滾。
四.各種鎖
1.悲觀鎖:每次去拿數據的時候都認爲別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會阻塞直到它拿到鎖。
2.樂觀鎖:每次去拿數據的時候都認爲別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,沒有則成功,失敗則重試。
3.共享鎖:共享鎖指的就是對於多個不同的事務,對同一個資源共享同一個鎖。
4.排他鎖:對於多個不同的事務,對同一個資源只能有一把鎖。
5.同步鎖:同步是協調多個相互關聯線程合作完成任務,彼此之間知道對方存在,執行順序往往是有序的。
6.互斥鎖:線程在申請互斥鎖時,如果互斥鎖被佔用,則線程進入阻塞狀態,擁有鎖的線程在釋放鎖時需要通知等待線程,這樣等待線程才能被喚醒。
7.自旋鎖:不會引起調用者睡眠,如果自旋鎖已經被別的執行單元保持,調用者就一直循環在那裏看是 否該自旋鎖的保持者已經釋放了鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章