这是我桌子的最小版本:
CREATE TABLE posts (
id int unsigned PRIMARY KEY auto_increment,
root_id int unsigned,
parent_id int unsigned
);
数据采用树形结构,因此parent_id
字段包含明显的,root_id
字段包含根帖的id,即树中最顶端的帖子,树上最古老的祖先。
现在,当我插入一个本身就是新树根的新帖子时,parent_id
将为null,因为它没有父级,但root_id
应该引用自己。有没有办法进行插入,将id
的相同值放入root_id
?我想避免插入,获取新的id并使用第二个查询更改root id,但也许这是唯一的方法。
提前致谢。
答案 0 :(得分:1)
你可以做到
INSERT INTO
posts
SET
root_id = (SELECT Auto_increment FROM information_schema.tables WHERE table_name = 'posts');
请参阅fiddle。
答案 1 :(得分:1)
您可以使用触发器在insert
delimiter |
CREATE TRIGGER update_root AFTER INSERT on posts
FOR EACH ROW
BEGIN
if NEW.parent_id IS NULL
then
SET NEW.root_id = NEW.id;
end if;
END
|
delimiter ;
答案 2 :(得分:0)
我只想到一个整洁的并测试它。它似乎有效,但在某些情况下它可能会出错?
INSERT INTO posts ( root_id, parent_id ) VALUES ( LAST_INSERT_ID() + 1, NULL );
这有什么问题或不利之处吗?