除了id列之外,使用包含行id的另一列插入行

时间:2013-03-31 13:43:22

标签: mysql

这是我桌子的最小版本:

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,但也许这是唯一的方法。

提前致谢。

3 个答案:

答案 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 );

这有什么问题或不利之处吗?

相关问题