本文介紹了如何從修改的行中返回數據。
簡介
有時在修改行的操作過程中獲取數據很有用。INSERT
、 UPDATE
和DELETE
命令都有一個支持這個的可選的 RETURNING
子句。使用RETURNING
可以避免執行額外的數據庫查詢來收集數據,并且在否則難以可靠地識別修改的行時尤其有用。
所允許的RETURNING
子句的內容與SELECT
命令的輸出列表相同。它可以包含命令的目標表的列名, 或者包含使用這些列的值表達式。一個常見的簡寫是RETURNING
, 它按順序選擇目標表的所有列。
在INSERT
中,可用于RETURNING
的數據是插入的行。 這在瑣碎的插入中并不是很有用,因為它只會重復客戶端提供的數據。 但依賴于計算出的默認值時可以非常方便。例如,當使用 serial
列來提供唯一標識符時, RETURNING
可以返回分配給新行的 ID:
CREATE TABLE users (firstname text, lastname text, id serial primary key);
INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;
RETURNING
子句對于INSERT ... SELECT
也非常有用。
在UPDATE
中,可用于RETURNING
的數據是被修改行的新內容。 例如:
UPDATE products SET price = price * 1.10
WHERE price <= 99.99
RETURNING name, price AS new_price;
在DELETE
中,可用于RETURNING
的數據是刪除行的內容。例如:
DELETE FROM products
WHERE obsoletion_date = 'today'
RETURNING *;
如果目標表上有觸發器,可用于RETURNING
的數據是被觸發器修改的行。因此,檢查由觸發器計算的列是 RETURNING
的另一個常見用例。
文檔內容是否對您有幫助?