我想创建一个触发器,其中子表从父表中提取所有现有记录。
我创建了将父表主键引用为新表中外键的子表
CREATE OR REPLACE TRIGGER trigger name
AFTER INSERT ON table_name(parent_table)
FOR EACH ROW
BEGIN
insert statement for child table;
END;
上面的触发器是为将插入子表创建的记录创建的,我想将所有旧记录(在创建子表之前存在(推送到新的子表。触发器是否有助于提取所有旧记录?
显然没有!!
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
)
干杯!!