Postgresql
將插入的 id 插入另一個表
這是場景:
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;