【问题标题】:MySQL trigger result - 1064MySQL 触发结果 - 1064
【发布时间】:2021-02-24 04:55:46
【问题描述】:

我需要在 sql 中创建一个触发器来执行以下操作: Wordpress Table 'options' 在 id 1 和 id 2 中有网站的 option_value URL。

如果该 URL 在该特定位置(id 1 和 id2)发生更改,则应运行触发器以设置回 old.option_value

CREATE TRIGGER tr_up_otpions_value
BEFORE UPDATE ON option_value FOR EACH ROW
BEGIN
IF (:old.option_value = 'https://example.com') then
:new.option_value := 'https://example.com';
end if;
end;

但我收到以下错误:

#1064 - Error ':old.option_value = 'https://example.com') then
    :new.option_value := 'h...' Row 4

【问题讨论】:

    标签: mysql sql if-statement triggers mysql-error-1064


    【解决方案1】:

    您需要从旧值和新值中删除: 符号

    还需要添加set关键字。

    之后,如果你有一个看起来像这样的表:

    create table Zr_options (option_value varchar(500))
    

    那么这个 BEFORE UPDATE TRIGGER 将起作用:

    CREATE TRIGGER tr_up_otpions_value
    BEFORE UPDATE 
    ON Zr_options FOR EACH ROW
    BEGIN
        IF old.option_value = 'https://example.com' then
            set new.option_value = 'https://example.com';
        end if;
    end;
    

    这是一个演示:

    DEMO

    【讨论】:

    • 我确实像你解释的那样,1. 创建表 option_value(option_value varchar(500)) 2. INSERT INTO option_value VALUES('http:test') 3. INSERT INTO option_value VALUES('example.com' ) 4. 在每行开始更新 option_value 之前创建触发器 tr_up_otpions_value 如果 old.option_value = 'example.com' 然后设置 new.option_value := 'example.com';万一;结尾;但这给了我同样的错误:#1064 - SQL 语法错误。 '' 第 6 行
    • 嗨@max你能和我分享整个错误吗?正如 xou 在这里看到的那样:dbfiddle.uk/… 一切正常...
    • link 我附上了一张表格的截图,也许有帮助。 link 这是错误消息
    • 你好@max,从你的错误图片中少了一个部分:; end if; end;这是因为图片被剪掉了还是?
    • 是的,表名是 Zr_options,里面有一个带有 url 的 option_value,如果该 url 被更改,它应该触发 option_id 1 或 2 中 option_value 的 old.value
    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2012-02-20
    • 2015-11-09
    • 2016-02-16
    • 2017-09-03
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多