亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PostgreSQL教程(九):事物隔離介紹

 更新時間:2015年05月04日 10:16:06   投稿:junjie  
這篇文章主要介紹了PostgreSQL教程(九):事物隔離介紹,本文主要針對讀已提交和可串行化事物隔離級別進行說明和比較,需要的朋友可以參考下

在SQL的標準中事物隔離級別分為以下四種:
    1. 讀未提交(Read uncommitted)
    2. 讀已提交(Read committed)
    3. 可重復讀(Repeatable read)
    4. 可串行化(Serializable)
    然而PostgreSQL在9.1之前的版本中只是實現了其中兩種,即讀已提交和可串行化,如果在實際應用中選擇了另外兩種,那么PostgreSQL將會自動向更嚴格的隔離級別調整。在PostgreSQL v9.1的版本中提供了三種實現方式,即在原有的基礎上增加了可重復讀。在這篇博客中我們將只是針對2)和4)進行說明和比較,因為在9.1中,3)和4)的差別也是非常小的。

 

  讀已提交 可串行化
PostgreSQL缺省隔離級別
其它事物未提交數據是否可見 不可見 不可見
執(zhí)行效率
適用場景 簡單SQL邏輯,如果SQL語句中含有嵌套查詢,那么在多次SQL查詢中將極有可能獲得不同版本的數據。 復雜SQL邏輯,特別是帶有嵌套的查詢比較適用。
SELECT查詢一致性時間點 從該SELECT查詢開始執(zhí)行時,在此查詢執(zhí)行期間,任何其它并發(fā)事物針對該查詢結果集的數據操作都將不會被本次查詢讀到,即本次查詢獲取的數據版本是與查詢開始執(zhí)行時的數據版本相一致。 從該SELECT查詢所在事物開始時,在此查詢執(zhí)行期間,任何其它并發(fā)事物針對該查詢結果集的數據操作都將不會被本次查詢讀到,即本次查詢獲取的數據版本是與查詢所在事物開始時的數據版本相一致。
同事物內的數據操作是否可見 比如在同一個事物內存在update和select操作,即使當前事物尚未提交,update所作的修改,在當前事物后面的select中依然可見。 和讀已提交相同。
同事物內多次相同的select所見的數據是否相同 不同,由于該級別select的一致性時間點是該查詢開始執(zhí)行時,而多次查詢的時間點將肯定不相同,如果在第一次查詢開始到第二次查詢開始之間,其它的并發(fā)事物修改并提交或當前事物僅修改了查詢將要獲取的數據,那么這些數據操作的結果將會在第二個查詢中有所體現。 需要分兩步來說,對于同一事物內的修改如果發(fā)生在兩次查詢語句之間,那么第二個查詢將會看到這些修改的結果。然而對于其它并發(fā)事物的修改,將不會造成任何影響,即兩次select的結果是相同的。原因顯而易見,該隔離級別的select一致性時間點是與事物開始時相一致的。
相同行數據的修改 如果此時兩個并發(fā)事物在修改同一行數據,先修改的事物將會給該行加行級鎖,另外一個事物將進入等待狀態(tài),直到第一個事物操作該行結束。那么倘若第一個針對該行的修改操作最終被其事物回滾,第二個修改操作在結束等待后,將直接修改該數據。然而如果第一個操作是被正常提交的話,那么就需要進一步判斷該操作的類型,如果是刪除(delete)該行,第二個修改操作將直接被忽略。如果是update該行的記錄,第二個修改操作則需要重新評估該行是否依然符合之前定義的修改條件。 和讀已提交隔離級別的機制基本相同,只是在第一個修改操作提交后,第二個操作將不再區(qū)分之前的修改是delete還是update,而是直接并返回下面信息:Error: Can't serialize access due to concurrent update. 這是因為一個可串行化的事務在可串行化事務開始之后不能更改或者鎖住被其他事務更改過的行。因此,當應用收到這樣的錯誤信息時,它應該退出當前的事務然后從頭開始重新進行整個事務。在應用程序中,也應該有必要的代碼來專門處理該類錯誤。


    最后需要說明的是,在絕大多數的情況下,讀已提交級別均可適用,而且該級別的并發(fā)效率更高。只有在比較特殊的情況下,才手工將當前的事物隔離級別調整為可串行化或可重復讀。

您可能感興趣的文章:

相關文章

  • PostgreSQL使用JSONB存儲和查詢復雜的數據結構

    PostgreSQL使用JSONB存儲和查詢復雜的數據結構

    在PostgreSQL中,JSONB是一種二進制格式的JSON數據類型,它允許你在數據庫中存儲和查詢復雜的JSON數據結構,本文給大家介紹了如何使用JSONB類型在PostgreSQL中存儲和查詢復雜的數據結構,需要的朋友可以參考下
    2024-04-04
  • 查看PostgreSQL數據庫版本的方法小結

    查看PostgreSQL數據庫版本的方法小結

    這篇文章主要給大家介紹了關于如何查看PostgreSQL數據庫的版本,查看PostgreSQL?數據庫的版本號,可用方法很多,文中介紹了三種方法,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-12-12
  • Postgresql使用update語句的方法示例

    Postgresql使用update語句的方法示例

    PostgreSQL是一種開源的關系型數據庫管理系統(tǒng),它支持SQL語言以及許多高級功能,如事務、外鍵、觸發(fā)器等,下面這篇文章主要給大家介紹了關于Postgresql使用update語句的相關資料,需要的朋友可以參考下
    2024-04-04
  • postgreSql分組統(tǒng)計數據的實現代碼

    postgreSql分組統(tǒng)計數據的實現代碼

    這篇文章給大家介紹postgreSql的監(jiān)控記錄表里多條不同時間的數據,只取最新的數據,并分組統(tǒng)計,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-12-12
  • GP如何查詢并刪除重復數據

    GP如何查詢并刪除重復數據

    這篇文章主要介紹了GP如何查詢并刪除重復數據問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • PostgreSQL有效地處理數據的加密和解密的常見方法

    PostgreSQL有效地處理數據的加密和解密的常見方法

    在信息化建設和等保建設中,都要求實現對用戶數據的隱私保護,也就是我們常說的脫敏,那么在?PostgreSQL?數據庫中有沒有這樣的方法或者策略可以實現呢,本文小編將給大家介紹一下PostgreSQL有效地處理數據的加密和解密的常見方法,需要的朋友可以參考下
    2025-03-03
  • Postgresql 動態(tài)統(tǒng)計某一列的某一值出現的次數實例

    Postgresql 動態(tài)統(tǒng)計某一列的某一值出現的次數實例

    這篇文章主要介紹了Postgresql 動態(tài)統(tǒng)計某一列的某一值出現的次數實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 在postgresql中運行sql文件并導出結果的操作

    在postgresql中運行sql文件并導出結果的操作

    這篇文章主要介紹了在postgresql中運行sql文件并導出結果的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Mysql?8.0.33?如何遷移至?Postgresql?16.2

    Mysql?8.0.33?如何遷移至?Postgresql?16.2

    由于云平臺需要改造,將Mysql替換成Postgresql,話說回來,Postgresql和Mysql語法有些差異,如何穩(wěn)妥的進行遷移,下面給大家分享Mysql?8.0.33?如何遷移至?Postgresql?16.2,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 安全高效的PostgreSQL數據庫遷移解決方案

    安全高效的PostgreSQL數據庫遷移解決方案

    PostgreSQL數據庫是一款高度可擴展的開源數據庫系統(tǒng),支持復雜的查詢、事務完整性和多種數據類型由于各種業(yè)務需求,企業(yè)常常需要將數據在不同的云平臺或私有環(huán)境之間遷移,所以本文小編給大家介紹了安全高效的PostgreSQL數據庫遷移解決方案,需要的朋友可以參考下
    2023-11-11

最新評論