基于其他列的自动列号

时间:2011-01-10 22:54:50

标签: mysql

+--------+---------+-----------+-------+
|   id   | title   | parent_id | root  |
+--------+---------+-----------+-------+
|    1   | Lvl-1   |     0     | null  |
+--------+---------+-----------+-------+
|    2   | Lvl-2   |     0     | null  |
+--------+---------+-----------+-------+
|    3   | Lvl-11  |     1     |   1   |
+--------+---------+-----------+-------+
|    4   | Lvl-12  |     1     |   1   |
+--------+---------+-----------+-------+
|    5   | Lvl-121 |     4     |   1   |
+--------+---------+-----------+-------+

这是我的问题,每次mysql插入新行时,我希望root中的值指向顶级父级(root中的值实际上与parent_id中的值有关)。

基于表,id = 5的行,parent_id = 4,id = 4的行的parent_id = 1,id = 1的行 parent = 0.这一行获得root = 1

基本上root值来自级联parent_id到顶级(直到parent_id = 0)

总而言之,我想要的是,当插入新行时,Mysql会自动为root指定值

这可以吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以使用触发器轻松完成此操作:

delimiter //
CREATE TRIGGER update_root BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
    SET NEW.root = (SELECT root FROM my_table WHERE id = NEW.parent_id);
END; //
delimiter ;