0

快速提问:

我有一个包含游戏列表的体育联盟数据库(比如说 40 个左右)。从电子表格导入整个赛程时,每场比赛都会自动分配一个 ID 号作为主键。由于这个不可见的(对用户)主键,游戏然后按降序显示在网页上。这是一个例子:联赛时间表

效果很好。唯一的问题是,有时比赛会被重新安排并移至以后的日期,或者添加新游戏并且必须将其插入到已经存在的时间表中。至此,我不得不手动编辑每个受影响行的 ID(使用 PhpMyAdmin)来解释更改,这可能非常乏味且耗时。

我真正想做的是设置表格以即时重新调整主键值。这意味着,如果我在表格的第五行插入一个全新的游戏,那么之后的所有游戏都会自动重新调整(ID 5 将变为 6,ID 6 将变为 7,依此类推)。

有没有办法设置表来做到这一点,或者我可以用一个特定的 SQL 命令来完成它?如果已经以不同的方式多次询问过这个问题,我们深表歉意。任何和所有的反馈都表示赞赏。

4

2 回答 2

2

您不应该为此使用您的 PRIMARY KEY。添加一个特殊的列,例如sort使用常规的INDEX,而不是UNIQUE. 也不必INT是,您可以使用实数。这样,您将始终能够在日程表的任意两行之间插入新行。

于 2013-09-23T19:14:38.273 回答
1

不,自动增量必须是唯一的,但不需要以任何特定顺序甚至是连续的。自动增量单调增加的事实只是其实现的巧合。不要依赖按时间顺序排列的值。

尝试调整这些值不仅手动且笨拙,而且有竞争条件的风险,否则需要锁定很多行。如果你插入一个 id 为 5 的行,但你的表有 10 亿行大于 id 5 怎么办?

重新编号主键列也存在风险,因为任何收到电子邮件告诉他们需要进入第 42 场游戏的用户最终可能会进入错误的游戏。

如果您需要按特定顺序(例如按时间顺序)查看行,则为此使用 DATE 列,而不是自动递增列。

于 2013-09-23T19:06:08.493 回答