【问题标题】:create trigger syntax error创建触发器语法错误
【发布时间】:2014-07-07 21:36:30
【问题描述】:

我有一个名为 daire 的表,它有名为 Kiraci、D_ID、Sahip 的列。 D_ID 是 PK 列。我想要的是当我更改 Kiraci 值时,我想触发删除一行或将新行插入另一个表。我试图创建一个像书面底部一样的触发器:

CREATE TRIGGER daireBosalt AFTER UPDATE ON daire
FOR EACH ROW
BEGIN
    IF NEW.Kiraci IS NULL THEN
    DELETE FROM kontrat WHERE kontrat.D_ID = NEW.D_id;
ELSEIF NEW.Kiraci IS NOT NULL THEN
    INSERT INTO kontrat (D_ID, BAy, BGun, BYil, Tutar, Sahip, Sure, Depo, Komisyon) VALUES (NEW.D_id, '01', '01','2014','100', NEW.Sahip,'1','100','100')
END IF;
END;

当我尝试创建这个脚本时,它总是给我语法错误。

【问题讨论】:

  • 您是否更改了分隔符? IE。 DELIMITER \` before the statement, end the create with \` 并使用 DELIMITER ; 重置分隔符
  • 您在 INSERT 后缺少分号。
  • 天哪,是的,对 thnx :)
  • 从逻辑上讲 - 为什么您觉得需要使用 ELSEIF 而不是仅使用 ELSE 执行第二次测试?您是否正在使用NEW.Kiraci IS NULL 可能为假而New.Kiraci IS NOT NULL 不会为真的量子计算机?

标签: mysql sql sql-update triggers


【解决方案1】:

在创建触发器时更改分隔符:

delimiter $$
CREATE TRIGGER daireBosalt AFTER UPDATE ON daire
FOR EACH ROW
BEGIN
    IF NEW.Kiraci IS NULL THEN
    DELETE FROM kontrat WHERE kontrat.D_ID = NEW.D_id;
ELSEIF NEW.Kiraci IS NOT NULL THEN
    INSERT INTO kontrat (D_ID, BAy, BGun, BYil, Tutar, Sahip, Sure, Depo, Komisyon) VALUES (NEW.D_id, '01', '01','2014','100', NEW.Sahip,'1','100','100')
END IF;
END $$

delimiter ;

【讨论】:

  • 您发布的代码没有正确更改分隔符。如果您有语法错误消息,您应该将其完整发布。
  • 1 个查询已执行,0 个成功,1 个错误,0 个警告: 1064 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'END IF; 附近使用的正确语法; END' 在第 8 行执行时间:0 秒传输时间:0 秒总时间:0.022 秒这是我得到的错误
猜你喜欢
  • 1970-01-01
  • 2012-10-20
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多