触发器创建成功但插入数据时报#1109错误:未知表'master_benang'
问题解决方法
问题根源
触发器的IF条件中直接引用master_benang表的字段,但未通过合法查询语句获取数据,MySQL无法识别这种无上下文的表字段引用,因此抛出"Unknown table 'master_benang' in field list"错误。同时原代码中使用的&&虽可作为逻辑与,但MySQL更规范的写法是AND,建议统一替换。
修正后的触发器代码
BEGIN DECLARE record_exists INT DEFAULT 0; -- 先查询是否存在匹配的记录 SELECT COUNT(*) INTO record_exists FROM master_benang WHERE jenis_benang = NEW.jenis_benang AND LOT = NEW.LOT; IF record_exists > 0 THEN UPDATE master_benang SET BOX_KRG = BOX_KRG + NEW.BOX_KRG, KG = KG + NEW.KG, BALE = BALE + NEW.BALE WHERE jenis_benang = NEW.jenis_benang AND LOT = NEW.LOT; ELSE INSERT INTO master_benang (id_supplier, jenis_benang, tipe_benang, LOT, BOX_KRG, KG, BALE, keterangan) VALUES(NEW.id_supplier, NEW.jenis_benang, NEW.tipe_benang, NEW.LOT, NEW.BOX_KRG, NEW.KG, NEW.BALE, NEW.keterangan); END IF; END
关键说明
通过SELECT ... INTO语句先判断master_benang中是否存在匹配的记录,再执行更新或插入操作,这是MySQL触发器中处理此类"存在则更新,不存在则插入"逻辑的标准方式,能避免无上下文的表字段引用错误。
内容的提问来源于stack exchange,提问作者Codename12
相关产品推荐
相关产品推荐

