濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > PostgreSQL批量update與oracle差異詳解

PostgreSQL批量update與oracle差異詳解

熱門標(biāo)簽:400電話申請客服 電銷機(jī)器人能補(bǔ)救房產(chǎn)中介嗎 天津開發(fā)區(qū)地圖標(biāo)注app 移動(dòng)外呼系統(tǒng)模擬題 江蘇400電話辦理官方 地圖標(biāo)注要花多少錢 電話機(jī)器人怎么換人工座席 濟(jì)南外呼網(wǎng)絡(luò)電話線路 廣州電銷機(jī)器人公司招聘

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

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

例如下面一張表:

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

我們最簡單的方式就是通過多個(gè)update來完成:

update t1 set id= 2
	where id = 1;

update t1 set id = 1
	where id = 2;

......

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

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

為了避免這個(gè)問題,我們可以使用case表達(dá)式來進(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è)寫法應(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í)行,所以在更新的過程中主鍵值出現(xiàn)重復(fù)應(yīng)該沒問題,
所以在Oracle中執(zhí)行正常。

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

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

您可能感興趣的文章:
  • postgresql的now()與Oracle的sysdate區(qū)別說明
  • PostgreSQL通過oracle_fdw訪問Oracle數(shù)據(jù)的實(shí)現(xiàn)步驟

標(biāo)簽:濮陽 杭州 海西 昭通 辛集 溫州 寶雞 榆林

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL批量update與oracle差異詳解》,本文關(guān)鍵詞  PostgreSQL,批量,update,與,oracle,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL批量update與oracle差異詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PostgreSQL批量update與oracle差異詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    景泰县| 宁安市| 花垣县| 兴义市| 南昌县| 青川县| 三亚市| 铜梁县| 万宁市| 精河县| 宝应县| 沛县| 新沂市| 个旧市| 淳安县| 四子王旗| 左贡县| 阳西县| 腾冲县| 临沭县| 祁阳县| 广昌县| 临汾市| 全椒县| 北海市| 五台县| 长垣县| 玉树县| 新巴尔虎左旗| 文昌市| 醴陵市| 邛崃市| 临夏县| 敦化市| 杂多县| 永修县| 金昌市| 崇左市| 枣阳市| 丘北县| 上犹县|