MySQL触发器报错1054:字段列表不存在‘Notification’列求助
问题排查与解决方案
核心错误点
INSERT触发器列名拼写错误
你编写的INSERT触发器中,将Notifications表的Notification列误写为Notifaction,这是直接触发1054 - 字段列表中不存在‘Notification’列错误的原因。触发器绑定表名与实际不符
你提到的业务表是Product2,但两个触发器里都写了ON Products2(多了末尾的s),这会导致触发器无法关联到正确的表,无法触发执行。可选检查:列名大小写一致性
如果你的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
相关产品推荐
相关产品推荐

