【发布时间】:2015-03-04 13:35:03
【问题描述】:
鉴于此表:
CREATE TABLE object
(
object_id int NOT NULL AUTO_INCREMENT,
root_id int NOT NULL,
name varchar(255),
PRIMARY KEY(object_id)
)
root_id 列是自引用外键。
基本上我想要的是root_id 在插入新记录时默认为与object_id 相同的值,如果root_id 为NULL。
我认为触发器可以解决这个问题。
CREATE TRIGGER add_default_original_id AFTER INSERT ON object
FOR EACH ROW BEGIN
IF (NEW.original_id IS NULL) THEN
SET NEW.original_id = NEW.object_id;
END IF;
END;
所以当我运行这个时:
INSERT INTO object(name) values('test')
我希望 object_id 和 original_id 具有相同的自动生成值
使用触发器 AFTER INSERT 我得到了
Error Code: 1362. Updating of NEW row is not allowed in after trigger
使用触发器 BEFORE INSERT 我运行得到 p>
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (...)
我猜是因为object_id 还没有得到生成的值。
当然,我可以在插入后在我的代码中“手动”执行此操作,但我正在尝试尽可能少地执行代码托管语句。在插入语句期间有什么方法可以轻松实现这一点?
【问题讨论】:
-
请显示所有代码:插入和触发。在我看来你需要使用序列,而不是触发