如何设计可插入和可重新排序的索引字段

时间:2017-10-10 03:35:10

标签: mysql database postgresql insert

如果我想设计一个像书一样的表,那么这本书有很多章节,章节可以通过其他字段排序,例如created_time

id | chapter_name
1  |  aa
2  |  cc
3  |  dd

我可以订购这些记录输出,如:

  

aa,cc,dd

在本书的章节中有太多章节,如果作者想在现有章节之间插入章节

在这种情况下有两种混淆:

  1. 如何设计它以便我可以插入记录bb输出,如:
  2.   

    aa,bb,cc,dd

    1. 如何设计它以便我可以重新排序dd输出,如:
    2.   

      aa,dd,cc

      非常感谢,如果我在开始时想错了,请指出

2 个答案:

答案 0 :(得分:0)

您必须将order_id更改为浮点值,以便插入/更新为1.5。或者你需要使用更大的数字空间,如1000,2000,3000,所以你可以在两者之间放置条目,例如1500。

如果您想要整数编号,可以使用order-by列生成row_number等动态排序,例如

SELECT chapter_name, row_number() OVER (ORDER BY order_id) FROM my_table;

或者,您是否可能对数据库表的工作方式感到困惑,并期望它维持一个没有ORDER BY子句的排序?因为他们不会那样工作。除非您提供ORDER BY,否则数据库可以按任何顺序返回行。

答案 1 :(得分:0)

如果您只想对值进行硬编码

第一个查询

更新table_name 设置id = 4和order_id = 4 名称=' dd';

更新table_name 设置id = 3和order_id = 3 名称=' cc';

插入(id,name,order_id)值(2,' bb',2);

对于第二个查询

更新table_name 设置id = 2和order_id = 2 名称=' dd';

(第二个查询是在他们的名字中没有bb记录的时候),只需按order_id订购