I have two tables and would like to create a trigger to delete on ticket_reply when a ticket is deleted:
ticket:
+-------------+-----------------+------+-----+---------+----------------+
| 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 | |
+-------------+-----------------+------+-----+---------+----------------+
And 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 | |
+-----------+-----------------+------+-----+---------+----------------+
My trigger:
CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
BEGIN
DELETE FROM ticket_reply
WHERE ticket_reply.ticket_id = ticket.id;
END
I get the error message: #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
Why?
Thanks.
Either use delimiters, or skip 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 ;
or
CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
DELETE FROM ticket_reply
WHERE ticket_reply.ticket_id = ticket.id;
It will make the syntax error go away; but your trigger is wrong, in fact it should be
CREATE TRIGGER `ticket_delete` BEFORE DELETE ON ticket
FOR EACH ROW
DELETE FROM ticket_reply
WHERE ticket_reply.ticket_id = OLD.id;
(notice OLD.id
instead of ticket.id
).