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

MySQL创建触发器报#1442错误 无法更新barang表如何解决

MySQL触发器1442报错原因及正确实现方案

报错原因

  • 核心是MySQL的内置限制:针对某张表的存储函数/触发器中,不允许直接对该表执行UPDATE/INSERT/DELETE等DML操作,因为触发触发器的原始语句本身就已经在操作这张表,会引发递归调用、死锁等问题,所以直接抛出#1442错误。你当前触发器中写的UPDATE barang ...语句直接操作了触发器绑定的barang表,正好触发了这个限制。
  • 额外逻辑问题:你写的关联条件t1.barang = t2.kode不符合需求,需求要求的关联条件是barang.kategori = kategori.kode,关联逻辑本身也存在错误。

正确实现方案

你使用的是BEFORE INSERT行级触发器,不需要额外写UPDATE语句修改表,直接对当前待插入行的NEW变量赋值即可,系统会自动把NEW中的值写入最终插入的行里,参考代码如下:

DROP TRIGGER IF EXISTS `update_date`;
CREATE DEFINER=`root`@`localhost` TRIGGER `update_date` BEFORE INSERT ON `barang` 
FOR EACH ROW 
BEGIN
    -- 自动填充插入时间
    SET NEW.tanggal = NOW();
    -- 关联kategori表查询对应的nama,赋值给kategori_nama
    SELECT nama INTO NEW.kategori_nama FROM kategori WHERE kode = NEW.kategori LIMIT 1;
    -- 计算折旧价
    SET NEW.hargadepresiasi = NEW.hargabeli * 2 / 8;
END;

注意事项

  • 如果存在kategori表中没有对应kode的场景,可以增加IF判断为NEW.kategori_nama设置默认值,避免查询无结果报错
  • 如果需要在更新barang表的kategori字段时也同步更新kategori_nama,可以额外创建一个BEFORE UPDATE触发器,复用上述赋值逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:10