0

我想创建一个触发器,其中子表从父表中提取所有现有记录。

我在新表中创建了引用父表主键作为外键的子表

CREATE OR REPLACE TRIGGER trigger name
AFTER INSERT ON table_name(parent_table)
FOR EACH ROW 
BEGIN 
   insert statement for child table;
END;

上面的触发器是为将在子表创建中插入帖子的记录创建的,我想将所有旧记录(在子表创建之前存在)推送到新的子表。触发器会帮助提取所有旧记录吗?

4

1 回答 1

0

显然没有!!

trigger开始从父表创建后向子表插入记录trigger。在创建之前插入到父表中的记录trigger需要手动插入。

如果要在trigger从父表创建子表之前提取所有记录,则需要编写一次性INSERT查询,如下所示:

INSERT INTO CHILD_TABLE
SELECT * FROM PARENT_TABLE P 
WHERE NOT EXISTS (SELECT 1 FROM CHILD_TABLE C WHERE P.PK = C.FK);

- 或者 -

INSERT INTO CHILD_TABLE
SELECT * FROM PARENT_TABLE P 
WHERE P.PK IN 
(SELECT PK FROM PARENT_TABLE
MINUS
SELECT FK FROM CHILD_TABLE
)

干杯!!

于 2019-08-20T07:45:08.127 回答