mysql (innodb) 增加一个值来创建一个洞

标签 mysql

假设我有一个简单的树类型表

id(key)     | parent | order
============================
1           | 0      | 0
2           | 0      | 1
4           | 2      | 0
5           | 2      | 1
6           | 2      | 2

我想插入一个新节点,使其具有 parent = 2order = 1,因此表数据如下所示:

id(key)     | parent | order
============================
1           | 0      | 0
2           | 0      | 1
4           | 2      | 0
5           | 2      | 2
6           | 2      | 3
7           | 2      | 1

例如现有行会增加其订单值。

确保现有行从现有任意值开始增加其顺序(非键字段)以便为我的插入语句留出空间的最佳方法是什么?

最佳答案

如果您有一个包含父级 $p 和订单位置 $o 的新行,您可以:

UPDATE table SET order = order + 1 WHERE parent = $p AND order >= $o

然后:

INSERT INTO order (id,parent,order) VALUES($id,$p,$o)

关于mysql (innodb) 增加一个值来创建一个洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401195/

相关文章:

php - Laravel Migration - 创建一个从现有列填充的新列

php - 如何使用php更新多个数据

mysql - Ubuntu 20.04 设置mysql phpmyadmin root密码

mysql - 如果 IPV6 IP 存储在 INT(10) UNSIGNED 中,如何从 mysql 数据库检索它们

sql - 如何更改 SQL 查询输出?

mysql - Laravel Eloquent : Many-to-Many Select items without children (using pivot)

java - 如何使用 while 循环使用从结果集中获取的值来更新另一个操作?

php - 用 2 维数组数据填充 MySQL 表

mysql - 如何在连接查询中返回基于一列的最大行?

php - 在插入/更新每一行时导出 MySQL 表以将其标记为 "exported"或等效项