我有两个表,并希望在删除故障单时创建一个在ticket_reply上删除的触发器:
票:
PHP_VERSION=$(php -v | tail -r | tail -n 1 | cut -d " " -f 2 | cut -c 1-3)
cd /usr/local/etc/php/$PHP_VERSION/
# cd /usr/local/etc/php/7.1/
并且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 | |
+-------------+-----------------+------+-----+---------+----------------+
我的触发器:
+-----------+-----------------+------+-----+---------+----------------+
| 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
为什么呢?
感谢。
答案 0 :(得分:1)
使用分隔符,或者跳过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
)。