You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器报错1054:字段列表不存在‘Notification’列求助

问题排查与解决方案

核心错误点

  1. INSERT触发器列名拼写错误
    你编写的INSERT触发器中,将Notifications表的Notification列误写为Notifaction,这是直接触发1054 - 字段列表中不存在‘Notification’列错误的原因。

  2. 触发器绑定表名与实际不符
    你提到的业务表是Product2,但两个触发器里都写了ON Products2(多了末尾的s),这会导致触发器无法关联到正确的表,无法触发执行。

  3. 可选检查:列名大小写一致性
    如果你的MySQL运行在区分大小写的环境(如Linux服务器),要确认Notifications表的列名(Notification、DateTime)大小写与触发器中的写法完全一致,否则也会触发字段不存在的错误。

修正后的触发器代码

先删除现有的错误触发器:

DROP TRIGGER IF EXISTS ProductSellPriceUpdateCheck;
DROP TRIGGER IF EXISTS ProductSellPriceInsertCheck;

1. AFTER UPDATE触发器(修正表名)

DELIMITER //
CREATE TRIGGER ProductSellPriceUpdateCheck 
AFTER UPDATE  
ON Product2 FOR EACH ROW  
BEGIN
    IF NEW.SellPrice <= NEW.BuyPrice THEN
        INSERT INTO Notifications(Notification, DateTime) 
        VALUES(CONCAT(NEW.ProductID,' was updated with a SellPrice of ', NEW.SellPrice,' which is the same or less than the BuyPrice'), NOW()); 
    END IF;
END //
DELIMITER ;

2. AFTER INSERT触发器(修正列名拼写+表名)

DELIMITER //
CREATE TRIGGER ProductSellPriceInsertCheck
AFTER INSERT
ON Product2 FOR EACH ROW
BEGIN
    IF NEW.SellPrice <= NEW.BuyPrice THEN
        INSERT INTO Notifications (Notification, DateTime) 
        VALUES (CONCAT('A sellPrice same or less than the BuyPrice was inserted for ProductID ', NEW.ProductID), NOW());
    END IF;
END //
DELIMITER ;

测试验证

执行以下操作验证触发器是否正常工作:

  • 插入测试数据(触发INSERT触发器):
    INSERT INTO Product2(ProductID, SellPrice, BuyPrice) VALUES('P001', 50, 60);
    
  • 更新测试数据(触发UPDATE触发器):
    UPDATE Product2 SET SellPrice=40 WHERE ProductID='P001';
    

完成后查询Notifications表,应该能看到对应的通知记录。

内容的提问来源于stack exchange,提问作者Theresa Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:20:47