2017-08-24 54 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

相關問題