触发 ON BEFORE 错误

Trigger ON BEFORE error

我有两个表,想创建一个触发器以在 ticket_reply 删除工单时删除:

门票:

+-------------+-----------------+------+-----+---------+----------------+
| Field       | Type            | Null | Key | Default | Extra          |
+-------------+-----------------+------+-----+---------+----------------+
| id          | int(8) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id     | int(8) unsigned | NO   | MUL | NULL    |                |
| status      | varchar(6)      | NO   |     | opened  |                |
| subject     | varchar(100)    | NO   | MUL | NULL    |                |
| message     | text            | NO   |     | NULL    |                |
+-------------+-----------------+------+-----+---------+----------------+

和ticket_reply:

+-----------+-----------------+------+-----+---------+----------------+
| Field     | Type            | Null | Key | Default | Extra          |
+-----------+-----------------+------+-----+---------+----------------+
| id        | int(8) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id   | int(8) unsigned | NO   |     | NULL    |                |
| ticket_id | int(8) unsigned | NO   | MUL | NULL    |                |
| message   | text            | NO   |     | NULL    |                |
+-----------+-----------------+------+-----+---------+----------------+

我的触发器:

CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
BEGIN
DELETE FROM ticket_reply
    WHERE ticket_reply.ticket_id = ticket.id;
END

我收到错误消息:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 5

为什么?

谢谢。

要么使用定界符,要么跳过 BEGIN / END :

DELIMITER $
CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
BEGIN
DELETE FROM ticket_reply
    WHERE ticket_reply.ticket_id = ticket.id;
END $
DELIMITER ;

CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
DELETE FROM ticket_reply
    WHERE ticket_reply.ticket_id = ticket.id;

它将消除语法错误;但是你的触发器是错误的,实际上它应该是

CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
DELETE FROM ticket_reply
    WHERE ticket_reply.ticket_id = OLD.id;

(注意 OLD.id 而不是 ticket.id)。