亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在PostgreSQL數據庫中實現upsert數據操作

發布時間:2021-01-05 14:21:47 來源:億速云 閱讀:437 作者:Leah 欄目:開發技術

如何在PostgreSQL數據庫中實現upsert數據操作?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1. 介紹PostgreSQL upsert

關系型數據庫中,upsert是一個組合詞,即當往表中插入記錄,如果該記錄已存在則更新,否則插入新記錄。為了使用該特性需要使用INSERT ON CONFLICT語句:

INSERT INTO table_name(column_list) 
VALUES(value_list)
ON CONFLICT target action;

該語法中target可以是下面列舉內容之一:

  • (column_name) – 列名

  • ON CONSTRAINT constraint_name – 唯一約束的名稱

  • WHERE predicate – 帶謂詞的where子句.

action可能為下面兩者之一:

DO NOTHING – 如果行已存在表中,不執行任何動作.
DO UPDATE SET column_1 = value_1, … WHERE condition – 更新表中一些字段.

注意:ON CONFLICT子句僅從PostgreSQL 9.5版本才有效。如果需用在之前版本,需要使用其他方法實現。

2. PostgreSQL upsert示例

下面語句創建customers表,演示PostgreSQL upsert特性:

DROP TABLE IF EXISTS customers;

CREATE TABLE customers (
	customer_id serial PRIMARY KEY,
	name VARCHAR UNIQUE,
	email VARCHAR NOT NULL,
	active bool NOT NULL DEFAULT TRUE
);

customers 表包括四個字段customer_id, name, email, active,name字段有唯一約束確保名稱唯一。

下面插入語句新增幾條記錄:

INSERT INTO 
 customers (name, email)
VALUES 
 ('IBM', 'contact@ibm.com'),
 ('Microsoft', 'contact@microsoft.com'),
 ('Intel', 'contact@intel.com');

假設現在Microsoft 修改email字段,從 contact@microsoft.com 到 hotline@microft.com。我們可以使用update更新語句,因為需要演示upsert特性,這里使用INSERT ON CONFLICT語句:

INSERT INTO customers (NAME, email)
VALUES('Microsoft','hotline@microsoft.com') 
ON CONFLICT ON CONSTRAINT customers_name_key 
DO NOTHING;

上面語句表示如果名稱表中存在,則什么都不做。下面語句與上面等價,但使用name列代替唯一約束名稱:

INSERT INTO customers (name, email)
VALUES('Microsoft','hotline@microsoft.com') 
ON CONFLICT (name) 
DO NOTHING;

假設當記錄已存在時你需要連接新的郵箱至原郵箱,這時update動作:

INSERT INTO customers (name, email)
VALUES('Microsoft','hotline@microsoft.com') 
ON CONFLICT (name) 
DO 
 UPDATE SET email = EXCLUDED.email || ';' || customers.email;

這里使用EXCLUDED虛擬表,其包含我們要更新的記錄,也就是新記錄(相對于原記錄customers)。等式右邊字段需要表名進行區分,才不會報字段不明確錯誤。
讀者可以自行驗證結果是否如你所愿。

關于如何在PostgreSQL數據庫中實現upsert數據操作問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

房山区| 天津市| 鄂伦春自治旗| 石门县| 花莲市| 阜新市| 岳阳县| 屏山县| 榆社县| 永寿县| 松潘县| 德安县| 屏东县| 许昌县| 九江市| 横山县| 应城市| 肃宁县| 保康县| 温宿县| 德清县| 宜黄县| 商南县| 大兴区| 襄汾县| 乐清市| 马鞍山市| 自治县| 古交市| 景德镇市| 凤凰县| 平南县| 若羌县| 岚皋县| 会同县| 永安市| 吕梁市| 佛学| 剑阁县| 襄城县| 永吉县|