为什么我的删除触发器没有删除任何行?

时间:2018-04-07 08:42:11

标签: mysql triggers

这是我的触发器代码:

DELIMITER $$
USE `smartclass_dbv2`$$ 
CREATE TRIGGER `delete_attendance_on_holiday` 
AFTER INSERT ON `attendance_tbl` 
FOR EACH ROW 
BEGIN 
     DELETE FROM `attendance_tbl` 
     WHERE (date = announcement_tbl.announcement_date && announcement_tbl.announcement_description = 'holiday'); 
END$$

它没有错误,但它没有删除任何行,我的代码意味着如果它在考勤表上发现任何与公告表中的日期相同的日期并且它是假日,它将删除出勤行表

这是我的出勤表:

http://prntscr.com/j22rme

enter image description here

这是我的announcement_table:

http://prntscr.com/j22rph

enter image description here

1 个答案:

答案 0 :(得分:0)

  

INSERT触发器触发时无法更改表。该   INSERT可能会执行某些锁定,这可能会导致死锁。也,   从触发器中删除或更新表将导致该表   在无限递归循环中再次触发的相同触发器。两者的   这些原因是MySQL阻止你这样做的原因。 Documentation

但您可以单独运行此查询。

您的删除查询不正确请查看以下内容

DELETE T1
FROM `attendance_tbl` T1
LEFT JOIN announcement_tbl T2 ON T1.date= T2.announcement_date
WHERE announcement_tbl.announcement_description = 'holiday';

<强> Syntax Delete Using Joins

DELETE T1 
FROM T1
        LEFT JOIN
    T2 ON T1.key = T2.key 
WHERE
T2.key IS NULL;