Postgresql

將插入的 id 插入另一個表

  • December 21, 2014

這是場景:

create table a (
id serial primary key,
val text
);

create table b (
id serial primary key,
a_id integer references a(id)
);

create rule a_inserted as on insert to a do also insert into b (a_id) values (new.id);

我正在嘗試在 b 中創建一條引用 a 插入表的記錄,但我得到的是 new.id 為空,因為它是從序列中自動生成的。我也嘗試過使用觸發器,即在表上啟動AFTER插入FOR EACH ROW,但結果是一樣的。有什麼辦法解決這個問題嗎?

您可以使用returning將返回創建的序列列的值的關鍵字。如果將 Insert 包裝在With表達式中,則可以訪問返回的 id 並插入到第二個表中。

WITH getval(id) as
   (INSERT INTO table_a (some_col) VALUES (some_val) RETURNING id) 
INSERT into table_b (id) SELECT id from getval;

其中 id 是插入到表 a 中的序列值。文件中的更多內容,儘管它是一個有些隱藏的功能。

請注意,如果需要,您還可以使用它returning *來返回整個更新的行,而不僅僅是串列列。

在 MySQL 中,您可以創建觸發器。我試過我的數據庫,它就像一個冠軍。

CREATE TRIGGER update_id_on_b AFTER INSERT ON a 
FOR EACH ROW 
INSERT INTO b SET a_id = NEW.id; 

INSERT INTO a VALUES(148,'test 1'); 

SELECT * FROM b;

引用自:https://dba.stackexchange.com/questions/86686