求助:创建触发器使parent_uid等于自增uid的异常问题
解决自增主键作为parent_uid插入的问题
你遇到的问题本质是自增主键的生成时机导致的:在BEFORE INSERT触发器触发时,MySQL还没有为当前插入的行分配自增的uid值,此时NEW.uid的默认值是0(或者未初始化的默认值),所以你的触发器设置parent_uid为0就不奇怪了。
正确的解决方案:使用AFTER INSERT触发器
既然BEFORE INSERT阶段拿不到生成后的自增uid,我们可以改用AFTER INSERT触发器——在数据成功插入、自增uid已经分配完成后,再更新这条记录的parent_uid为对应的uid:
CREATE TRIGGER set_parent_uid AFTER INSERT ON seller FOR EACH ROW UPDATE seller SET parent_uid = NEW.uid WHERE uid = NEW.uid;
为什么这个方案可行?
当AFTER INSERT触发器触发时,当前行已经被写入表中,NEW.uid就是刚生成的自增主键值,此时通过UPDATE语句将该行的parent_uid同步为这个值,就能得到你期望的uid和parent_uid相等的结果。
补充说明
如果你担心额外的UPDATE操作带来的性能影响,也可以考虑在插入数据时先不指定parent_uid,然后通过触发器自动补全。另外要注意:如果你的表存在大量高频插入操作,这种触发器的更新逻辑可能会带来轻微的性能损耗,但对于大多数场景来说完全可以接受。
内容的提问来源于stack exchange,提问作者pp492
相关产品推荐
相关产品推荐

