我有一个数据库表,它维护一些信息并且需要保持顺序。本质上,如果我列出了元素 1 到 5,并且我想添加一个新元素,那么它可以插入现有行中的任何位置,可以在最后、5 之后、1 之前的开头或中间的某处,例如 3 之后. 有没有办法使用 MySQL INSERT 语句并指定我们应该在哪一行之后插入索引?
我想不会。所以我这样做的策略是创建另一个列'order_number',它基本上记录了元素的顺序。例如,如果记录表有主键 (record_id) 和 order_number 并排列出,它看起来像这样:
record_id order_number
1 1
2 2
3 3
4 4
5 5
要在第 3 行之后向该行添加一个新元素,结果表将如下所示:
record_id order_number
1 1
2 2
3 3
**6** **4** <------ added row
4 **5** <-- changed order_number
5 **6** <-- changed order_number
在这种情况下,我可以通过简单地选择我想要的数据并提供 Order By order_number asc 子句来清楚地实现我想要的顺序。
但是,正如您所看到的,要进行简单的插入,它需要我更新出现在它之后的每一行的 order_number。预计该表至少有大量行(数量为 100,000),并且在每次插入操作时简单地更新每隔一行(因此锁定表)根本不可行。
在这种情况下,什么是更好的推荐策略?