我有一张桌子,桌子a上有varhar一个数组。例如 (1,2,3,4,5,6)。当我删除表中的第 5 个和第 6 个元素(最后一个)时,当新元素添加到表中时,创建的新元素不是 7,8,9 ...而是 5,6,7,8 ...事实证明,表5 和 6 不再位于同一行。当然你也可以清理数组,但是有没有可能让增量唯一呢?idbbbidаа
我有一张桌子,桌子a上有varhar一个数组。例如 (1,2,3,4,5,6)。当我删除表中的第 5 个和第 6 个元素(最后一个)时,当新元素添加到表中时,创建的新元素不是 7,8,9 ...而是 5,6,7,8 ...事实证明,表5 和 6 不再位于同一行。当然你也可以清理数组,但是有没有可能让增量唯一呢?idbbbidаа
您遇到了一些经典问题,我将快速描述这些问题(也许有人会有时间详细说明):
自动递增从最后一个值继续,在删除的值中留下间隙
这是绝对正常的。压制内心的完美主义者并让差距保持原样是值得的。这不会有什么问题,标准 int 的取值范围对于任何项目来说都足够了,除了那些会在地址栏中跟踪 ID 的少数人的视觉不适之外,这不会带来任何东西.
该项目需要存储实体引用列表,因此我将它们存储为以逗号分隔的值字符串
这种方法将不允许您正常使用关系数据库。在这种情况下,正确的方法是创建一个新表来描述关系。
不正确:
正确地:
形式上,这就是所谓的描述。数据库的正常形式,您可以在维基百科上阅读
我需要在 ID 更改时更新实体引用
为此特别发明了外键机制,可以让你在相关实体发生变化时执行一组基本的操作,例如禁止删除有学生的老师,反之,如果有学生则删除关系记录被删除。
InnoDB引擎上的自增逻辑如下
因此,您的情况只会在服务器重新启动时出现。要绕过此机制,请添加一个具有一个自动增量列的辅助表,并在您的表中删除自动增量。然后插入一条新记录将如下所示
您将仅从主表中删除记录。
定时清理辅助表即可
这是您问题的答案:https ://stackoverflow.com/questions/3718229/stop-mysql-reusing-auto-increment-ids 。简而言之:在这种情况下,只需拒绝使用自动增量并将键的最后一个值存储在单独的表中,并在添加新数据时更改它。