欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

 

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


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

相關(guān)文章

  • PostgreSQL備份和還原命令整理大全

    PostgreSQL備份和還原命令整理大全

    這篇文章主要給大家介紹了關(guān)于PostgreSQL備份和還原命令整理的相關(guān)資料,PostgreSQL是一款非常強(qiáng)大的開源數(shù)據(jù)庫系統(tǒng),提供種類繁多的備份選項(xiàng),包括完全備份、增量備份等,需要的朋友可以參考下
    2023-07-07
  • PostgreSQL中的COMMENT用法說明

    PostgreSQL中的COMMENT用法說明

    這篇文章主要介紹了PostgreSQL中的COMMENT用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql?常用SQL語句小結(jié)

    postgresql?常用SQL語句小結(jié)

    postgresql使用過程中常用到的一些sql語句,方便我們快速使用查詢一些操作特整理一下,方便需要的朋友
    2022-11-11
  • PostgreSQL報(bào)錯(cuò) 解決操作符不存在的問題

    PostgreSQL報(bào)錯(cuò) 解決操作符不存在的問題

    這篇文章主要介紹了PostgreSQL報(bào)錯(cuò) 解決操作符不存在的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL之pgdump備份恢復(fù)操作

    PostgreSQL之pgdump備份恢復(fù)操作

    這篇文章主要介紹了PostgreSQL之pgdump備份恢復(fù)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL中常用的時(shí)間日期腳本使用教程

    PostgreSQL中常用的時(shí)間日期腳本使用教程

    PostgreSQL是一款簡介而又性能強(qiáng)大的數(shù)據(jù)庫應(yīng)用程序,其在日期時(shí)間數(shù)據(jù)方面所支持的功能也都非常給力,下面就來看一下PostgreSQL中常用的日期時(shí)間腳本使用教程.
    2016-05-05
  • 快速解決PostgreSQL中的Permission denied問題

    快速解決PostgreSQL中的Permission denied問題

    這篇文章主要介紹了快速解決PostgreSQL中的Permission denied問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql去重函數(shù)distinct的用法說明

    Postgresql去重函數(shù)distinct的用法說明

    這篇文章主要介紹了Postgresql去重函數(shù)distinct的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql排序與limit組合場景性能極限優(yōu)化詳解

    Postgresql排序與limit組合場景性能極限優(yōu)化詳解

    這篇文章主要介紹了Postgresql排序與limit組合場景性能極限優(yōu)化詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • shell腳本操作postgresql的方法

    shell腳本操作postgresql的方法

    PostgreSQL支持大部分的SQL標(biāo)準(zhǔn)并且提供了很多其他現(xiàn)代特性,如復(fù)雜查詢、外鍵、觸發(fā)器、視圖、事務(wù)完整性、多版本并發(fā)控制等這篇文章主要介紹了shell腳本操作postgresql,需要的朋友可以參考下
    2022-12-12

最新評(píng)論