因此,我们有一个非常大的数据库表,可以在有限的时间内保存重要数据。 问题是该表永远不会被完全截断,并且自动增量id值达到9位,这在某种程度上需要在不久的将来重置。 我们确实需要在不截断当前数据的情况下重置它,并且表中当前的行需要保持相同的id值。 所以f.ex记录了id' 12345679'需要保持id' 123456789'在数据库中,但重置后,下一个新插入应该得到id' 1'然后' 2'等等。这些新的低值和旧值之间不会发生任何冲突,但我不知道如何以这种方式重置自动增量值。
答案 0 :(得分:0)
那是不可能的:
您无法将计数器重置为小于或等于任何值的值 已经被使用过。对于MyISAM,如果值小于或等于 到当前在AUTO_INCREMENT列中的最大值,该值 重置为当前最大值加1。对于InnoDB,如果值为 小于列中的当前最大值,不会发生错误 当前序列值不会改变。
(资料来源:https://dev.mysql.com/doc/refman/5.5/en/alter-table.html
您可以做的是创建一个新表并在其中插入新数据。然后创建一个VIEW,它将返回这两个表的UNION。
例如,假设您当前的表名为myData
:
myData
重命名为myData_Original
myData_New
(具有相同的结构)myData
myData
查看:
CREATE VIEW myData
AS
SELECT *
FROM myData_New
UNION ALL
SELECT *
FROM myData_Original
;