2017-08-24 55 views
1

给出下表。如何使用删除触发器从同一个表中删除行?

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被触发。我想要的是随后在条件成立的同一个表中删除其他一些行。

我有两个问题:

  1. 我如何可以访问假设currentrow其列的值?
  2. 并会触发执行触发器运行删除查询吗?

回答

1

你可以使用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 

DBFiddle Demo

更多关于CREATE TRIGGER

两个WHEN子句和触发器动作可能会访问的元素使用表格“NEW.column-name”和“OLD.column-name”的参考 插入,用。 OLD和NEW引用只能在触发器可用于对 它们是相关的事件,如下所示:

插入新的引用是有效

UPDATE NEW和OLD引用是有效

删除旧引用是有效的

+0

这是说在BEFORE'' TRIGGER'中没有替代旧的吗?你也没有回答我的第二个问题。 – Abbas

+0

你能分享一下'old'的文档链接吗? – Abbas

+0

@Abbas是的,你可以使用'BEFORE TRIGGER' – lad2025

相关问题