【问题标题】:MySQL: Trigger error: #1193 - Unknown system variable 'PurchasePrice'MySQL:触发错误:#1193 - 未知系统变量“PurchasePrice”
【发布时间】:2017-04-17 02:11:51
【问题描述】:

我正在尝试创建一个触发器,如果​​有人说他们有折扣代码,他们的门票购买价格会下降 10 美元。

我运行了代码:

CREATE TRIGGER alterPurchasePrice AFTER INSERT ON CustomerOrders FOR EACH ROW 
BEGIN IF DiscountCode = 'yes' THEN SET PurchasePrice = Cost - 10 END$$

但得到了错误:

#1193 - Unknown system variable 'PurchasePrice'

但是,我的表中有该列。所以我不明白为什么它不识别它?

【问题讨论】:

    标签: mysql triggers mysql-error-1193


    【解决方案1】:

    您需要将列标识为来自表:

    DELIMITER $$
    
    CREATE TRIGGER alterPurchasePrice
        BEFORE INSERT ON CustomerOrders
         FOR EACH ROW 
    BEGIN
        IF new.DiscountCode = 'yes' THEN
            SET new.PurchasePrice = new.Cost - 10;
        END IF;
    END$$
    
    DELIMITER ;
    

    如果要重新设置值,应该是插入前触发器。

    【讨论】:

    • 当我运行时,我得到:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“END IF END”附近使用正确的语法。我只用 END$$ 尝试过,但得到了同样的错误。
    • 有什么想法为什么在更改后仍然会出错?
    • @DJPharaohCHS 。 . .在END IF 中添加了一个分号。
    【解决方案2】:

    在每行的 CustomerOrders 上插入后创建触发器 alterPurchasePrice BEGIN IF NEW.DiscountCode = 'yes' THEN SET NEW.PurchasePrice = Cost - 10 END$$

    您没有使用 NEW 关键字。请使用它

    【讨论】:

    • 如果您记得将代码格式化为...代码,这将非常有帮助;)也许还可以用粗体突出显示您添加的内容,以便更容易发现。
    • 这个答案与公认的答案有何不同/更好?尽量避免翻旧帖,尤其是那些答案已被接受的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2023-04-06
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多