[英]Mysql trigger statement keeps giving syntax error
当我尝试在 phpmyadmin 中执行此语句时,我不断收到错误消息。 我正在运行 mysql 5.7
DELIMITER //
CREATE OR REPLACE TRIGGER update_counts_trigger AFTER INSERT OR UPDATE OR DELETE ON tickets
FOR EACH ROW
BEGIN
DECLARE V_uitvoeringId, V_ReserveringId varchar(50);
DECLARE V_tekoop, V_gereserveerd, V_wachtlijst int;
SET V_ReserveringId = NEW.reserveringId OR OLD.reserveringId;
SET V_uitvoeringId = ( SELECT uitvoeringId FROM reservering WHERE id=V_ReserveringId )
SET V_tekoop = (
SELECT count(*)
FROM tickets t
WHERE t.tekoop AND NOT t.geannuleerd AND NOT t.verkocht AND t.uitvoeringId = V_uitvoeringId);
SET V_gereserveerd = (
SELECT count(*)
FROM tickets t
WHERE NOT t.wachtlijst AND NOT t.geannuleerd AND NOT t.verkocht AND t.uitvoeringId = V_uitvoeringId);
SET V_wachtlijst = (
SELECT count(*) FROM tickets t WHERE t.wachtlijst AND NOT t.geannuleerd AND NOT t.verkocht AND t.uitvoeringId = V_uitvoeringId);
update uitvoering
set tekoop = V_tekoop,
gereserveerd = V_gereserveerd,
wachtlijst = V_wachtlijst,
vrije_plaatsen = aantal_plaatsen - V_gereserveerd + V_tekoop
WHERE id=V_uitvoeringId;
END //
DELIMITER ;
任何人都可以看到有什么问题吗?
还有其他语法错误导致这些抱怨。
OR REPLACE
选项。 必须删除触发器,然后重新创建。OR
操作,只有一个,这意味着即使定义可能相同,您也必须创建 3 个触发器。 但是,您似乎只需要一个AFTER UPDATE
操作? ...因为AFTER INSERT
没有OLD
引用,而AFTER DELETE
没有NEW
引用。;
使用SELECT uitvoeringId
查询后丢失。把所有这些放在一起,变成:
DELIMITER //
CREATE TRIGGER update_counts_trigger AFTER UPDATE ON tickets
FOR EACH ROW
BEGIN
DECLARE V_uitvoeringId, V_ReserveringId varchar(50);
DECLARE V_tekoop, V_gereserveerd, V_wachtlijst int;
SET V_ReserveringId = NEW.reserveringId OR OLD.reserveringId;
SET V_uitvoeringId = ( SELECT uitvoeringId FROM reservering WHERE id=V_ReserveringId );
SET V_tekoop = (
SELECT count(*)
FROM tickets t
WHERE t.tekoop AND NOT t.geannuleerd AND NOT t.verkocht AND t.uitvoeringId = V_uitvoeringId);
SET V_gereserveerd = (
SELECT count(*)
FROM tickets t
WHERE NOT t.wachtlijst AND NOT t.geannuleerd AND NOT t.verkocht AND t.uitvoeringId = V_uitvoeringId);
SET V_wachtlijst = (
SELECT count(*) FROM tickets t WHERE t.wachtlijst AND NOT t.geannuleerd AND NOT t.verkocht AND t.uitvoeringId = V_uitvoeringId);
update uitvoering
set tekoop = V_tekoop,
gereserveerd = V_gereserveerd,
wachtlijst = V_wachtlijst,
vrije_plaatsen = aantal_plaatsen - V_gereserveerd + V_tekoop
WHERE id=V_uitvoeringId;
END //
DELIMITER ;
然后在 phpMyAdmin 中使用它:
然后在执行 SQL 之后:
然后检查触发器选项卡:
...并单击触发器处的Edit
显示定义:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.