我有一个记录为M +2的数据库,问题是:我不得不删除大约10 000,现在我遇到了这个问题,ID会丢失,例如
ID: 100
ID: 102
ID: 103
...
如何组织这个?也就是说,用这个替换所有后续ID没有“漏洞”?请记住,我有超过200万条记录(每天15,000条记录),手动不可行。
我需要:
ID: 101
ID: 102
ID: 103
...
答案 0 :(得分:4)
不要填补空白。重新编号现有行是一个非常糟糕的主意,特别是如果它是PK字段。例如,想想如果有一天他们认为社会安全号码必须是连续的,那么它们会造成的混乱,所以当人们为了填补空白而死亡时,他们会把所有这些都转移。因此,您可以获得曾经属于其他人的经常更改的ID号。
对于一个好的代理键,实际值应该没有任何意义,因此间隙也没有意义。
如果这是您的主要问题,为什么不添加isDeleted位字段并标记记录而不是实际删除它们。瞧,没有差距!
如果你绝对必须有一个递增的数字(如行号),那么只需do it in your queries,这样你就不必承担维护它的麻烦。
答案 1 :(得分:0)
您可能会发现将所有记录存储在源表中,然后在确定哪些记录符合条件后将INSERT
存储到辅助表中。这通常很简单:
INSERT INTO b_table (a, b, c) SELECT a, b, c FROM a_table
如果您有自动增量ID字段,则只需将其从两侧取出,它将在b_table
侧重新创建,顺序无间隙。如果您愿意,可以在a_table
完成后清除记录。