给出下表。
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。我想要的是随后删除同一个表中条件成立的其他一些行。
我有两个问题:
- 如何访问假设的
当前行
及其列的值? - 触发器会执行触发器运行删除查询吗?
最佳答案
您可以使用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
Both the WHEN clause and the trigger actions may access elements of the row being inserted, deleted or updated using references of the form "NEW.column-name" and "OLD.column-name", where column-name is the name of a column from the table that the trigger is associated with. OLD and NEW references may only be used in triggers on events for which they are relevant, as follows:
INSERT NEW references are valid
UPDATE NEW and OLD references are valid
DELETE OLD references are valid
关于android - 如何使用删除触发器删除同一个表中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45860089/