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

PostgreSQL批量update與oracle差異詳解

 更新時(shí)間:2021年01月07日 10:49:18   作者:foucus、  
這篇文章主要介紹了PostgreSQL批量update與oracle差異,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

上篇文章給大家介紹了PostgreSQL實(shí)現(xiàn)批量插入、更新與合并操作的方法 感興趣的朋友可以點(diǎn)擊查看,今天給大家分享PostgreSQL批量update與oracle差異,具體內(nèi)容如下所示:

當(dāng)我們?cè)跀?shù)據(jù)庫(kù)中有這樣的需求時(shí):
需要以某列的當(dāng)前值為判斷對(duì)象,將其更新成其它值。

例如下面一張表:

   ID INFO
---------- ----------
     2 a
     1 b
     3 c
     4 d
     5 e

我們最簡(jiǎn)單的方式就是通過(guò)多個(gè)update來(lái)完成:

update t1 set id= 2
	where id = 1;

update t1 set id = 1
	where id = 2;

......

看上去很簡(jiǎn)單,但是上面的更新卻存在一個(gè)很大的問(wèn)題,當(dāng)我們第一次執(zhí)行完update后,表中id=2其實(shí)有兩行數(shù)據(jù),再去進(jìn)行第二條語(yǔ)句時(shí),兩條語(yǔ)句將都會(huì)被更新。

顯然這些并非我們的意愿,我們僅僅是希望id=1和id=2的值互換。

為了避免這個(gè)問(wèn)題,我們可以使用case表達(dá)式來(lái)進(jìn)行批量更新。

SQL> update t1
 2 set id = case when id = 1
 3 then 2
 4 when id = 2
 5 then 1
 6 else id end;

5 rows updated.

SQL> select * from t1;

    ID INFO
---------- ----------
     2 a
     1 b
     3 c
     4 d
     5 e

這樣不僅執(zhí)行正確,而且只需要執(zhí)行一次,自然更加高效。這個(gè)寫(xiě)法應(yīng)用范圍很廣,例如我們可以很輕松實(shí)現(xiàn)主鍵值之間的互換。否則我們需要執(zhí)行3次update才可以完成。

PostgreSQL差異點(diǎn):

需要注意的是,在pg中使用該方法會(huì)因?yàn)橹麈I重復(fù)而報(bào)錯(cuò)。

bill@bill=>update t2
set id = case when id = 1
then 2
when id = 2
then 1
else id end;
ERROR: duplicate key value violates unique constraint "t2_pkey"
DETAIL: Key (id)=(2) already exists.

但是,約束的檢查應(yīng)該是在更新完成后執(zhí)行,所以在更新的過(guò)程中主鍵值出現(xiàn)重復(fù)應(yīng)該沒(méi)問(wèn)題,
所以在Oracle中執(zhí)行正常。

當(dāng)然在pg中存在這種問(wèn)題主要還是和pg的多版本特性有關(guān)。不過(guò)一般需要進(jìn)行這種主鍵的調(diào)換的時(shí)候,我們可以先禁用掉約束即可。

到此這篇關(guān)于PostgreSQL批量update與oracle差異的文章就介紹到這了,更多相關(guān)PostgreSQL批量update內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL 中的單引號(hào)與雙引號(hào)用法說(shuō)明

    PostgreSQL 中的單引號(hào)與雙引號(hào)用法說(shuō)明

    這篇文章主要介紹了PostgreSQL 中的單引號(hào)與雙引號(hào)用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • psql 執(zhí)行文件 permission denied的解決

    psql 執(zhí)行文件 permission denied的解決

    這篇文章主要介紹了psql 執(zhí)行文件 permission denied的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSql觸發(fā)器創(chuàng)建、使用以及刪除示例詳解

    PostgreSql觸發(fā)器創(chuàng)建、使用以及刪除示例詳解

    在PostgreSQL中觸發(fā)器函數(shù)是一個(gè)沒(méi)有參數(shù)并且返回trigger類(lèi)型的函數(shù),這篇文章主要給大家介紹了關(guān)于PostgreSql觸發(fā)器創(chuàng)建、使用以及刪除的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • PostgreSQL 禁用全表掃描的實(shí)現(xiàn)

    PostgreSQL 禁用全表掃描的實(shí)現(xiàn)

    這篇文章主要介紹了PostgreSQL 禁用全表掃描的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • postgresql 查看當(dāng)前用戶名的實(shí)現(xiàn)

    postgresql 查看當(dāng)前用戶名的實(shí)現(xiàn)

    這篇文章主要介紹了postgresql 查看當(dāng)前用戶名的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 解析PostgreSQL中Oid和Relfilenode的映射問(wèn)題

    解析PostgreSQL中Oid和Relfilenode的映射問(wèn)題

    這篇文章主要介紹了PostgreSQL中Oid和Relfilenode的映射問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 最新評(píng)論