如何使用删除触发器从同一个表中删除行?
问题描述:
给出下表。如何使用删除触发器从同一个表中删除行?
MY_TABLE
CREATE TABLE MY_TABLE (COL_1 VARCHAR, COL_2 VARCHAR);
我已经创建了下面的触发器。每当行即将被删除
CREATE TRIGGER IF NOT EXIST MY_TRIGGER BEFORE DELETE ON MY_TABLE FOR EACH ROW BEGIN DELETE FROM MY_TABLE WHERE COL_2=currentrow.COL_1
MY_TRIGGER被触发。我想要的是随后在条件成立的同一个表中删除其他一些行。
我有两个问题:
- 我如何可以访问假设
currentrow
其列的值? - 并会触发执行触发器运行删除查询吗?
答
你可以使用AFTER TRIGGER
并指删列使用old
:
CREATE TABLE MY_TABLE (COL_1 VARCHAR, COL_2 VARCHAR);
INSERT INTO My_Table VALUES (1,1), (1,2),(2,1),(2,2);
CREATE TRIGGER MY_TRIGGER
AFTER DELETE ON MY_TABLE
FOR EACH ROW
BEGIN
DELETE FROM MY_TABLE
WHERE COL_2=old.COL_1;
END
DELETE FROM My_TABLE WHERE col_1 = 1;
SELECT * FROM My_Table;
-- 2 2
更多关于CREATE TRIGGER
两个WHEN子句和触发器动作可能会访问的元素使用表格“NEW.column-name”和“OLD.column-name”的参考 插入,用。 OLD和NEW引用只能在触发器可用于对 它们是相关的事件,如下所示:
插入新的引用是有效
UPDATE NEW和OLD引用是有效
删除旧引用是有效的
这是说在BEFORE'' TRIGGER'中没有替代旧的吗?你也没有回答我的第二个问题。 – Abbas
你能分享一下'old'的文档链接吗? – Abbas
@Abbas是的,你可以使用'BEFORE TRIGGER' – lad2025