我在使用应该修复表中列的插入触发器时遇到了问题:
id - auto increment int
thread_id - int [NULL]
我想要实现的是将 thread_id
设置为 id
如果它被插入为 NULL。我失败了,因为:
- 使用
before insert
触发器仍然没有id
的新值并且神秘地将thread_id
设置为 0 - 使用
after insert - update
触发器抛出合理的异常无法更新表,因为它已被语句使用
。 - 不能添加额外的自增字段
这个问题的解决方案是什么?
最佳答案
我发现获得新增量值的唯一方法不是花哨的形式。我假设您要插入一个新值,所以它应该是最大 id + 1:
CREATE TRIGGER mytrigger BEFORE INSERT ON yourtable
FOR EACH ROW BEGIN
SET NEW.thread_id = IF(
ISNULL(NEW.thread_id),
(SELECT MAX(id) + 1 FROM yourtable),
NEW.thread_id);
END;
它适用于我的情况,如果它为 NULL,它将获得最大 ID + 1,这将是新 ID。
关于mysql - 使用自动增量字段插入触发器之前/之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991464/