【问题标题】:Error for before insert or update on插入或更新之前的错误
【发布时间】:2017-10-26 09:04:53
【问题描述】:

我是 dbms 查询的新手,所以如果有人能弄清楚应该在这里做什么。另外,我正在使用Mysql。

代码:

-> create trigger age_trigger before insert or update of age on employee
-> for each row
-> when( new.age <25)
-> begin
-> select 'Age can not be less than 25'
-> end;

错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 语法使用 near ' 或更新每行员工的年龄 when( new.age

【问题讨论】:

    标签: mysql sql database rdbms database-trigger


    【解决方案1】:

    你不能只是想出自己的语法:)

    看看手册:CREATE TRIGGER Syntax

    您不能指定多个 trigger_events。您需要单独的插入和更新触发器。而这个of age也没有业务。

    总而言之,您尝试在 MySQL 中执行的操作可以在 MySQL 中完成(如果您坚持的话,可以在 google 中找到 SIGNAL),但最佳实践是,将这种逻辑放置在应用程序层中。不要将这样的逻辑放在数据库中。

    【讨论】:

    • 好的,我确实进行了更改,但现在错误出现在 when 子句中。你能猜到吗?
    • 您在我发布的链接中看到WHEN 吗?我真的敦促你把这样的逻辑放在你的应用程序中。在手册和 SIGNAL 页面中有很多编写触发器的示例,我建议谷歌搜索。 Stackoverflow 不是代码编写服务。当您提出问题时,您至少应该对该主题有所了解。没有冒犯,但你似乎没有。咨询教程什么的...
    • 抱歉,您的建议对我没有用。
    • 好吧,很抱歉听到这个消息。我经常遵循这样的话“授人以鱼,你养他一天,教一个人钓鱼,你养他一辈子”。这涉及到,男人/女人自己做一些工作。
    • 哦,太好了!好名字啊XD
    【解决方案2】:

    以下是实现BEFORE INSERT 以获得所需结果的选项之一。

    CREATE TRIGGER age_trigger
    BEFORE INSERT ON table1
    FOR EACH ROW 
    BEGIN 
    IF NEW.age < 25 
    THEN SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = 'Age can not be less than 25'; 
    END IF; 
    END;
    

    before update 触发器可以使用类似的语法。

    DEMO

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多