SQL MyISAM,仅重置新插入的自动增量

时间:2016-01-23 08:09:37

标签: mysql auto-increment myisam

因此,我们有一个非常大的数据库表,可以在有限的时间内保存重要数据。 问题是该表永远不会被完全截断,并且自动增量id值达到9位,这在某种程度上需要在不久的将来重置。 我们确实需要在不截断当前数据的情况下重置它,并且表中当前的行需要保持相同的id值。 所以f.ex记录了id' 12345679'需要保持id' 123456789'在数据库中,但重置后,下一个新插入应该得到id' 1'然后' 2'等等。这些新的低值和旧值之间不会发生任何冲突,但我不知道如何以这种方式重置自动增量值。

1 个答案:

答案 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
  • 的VIEW

myData查看:

CREATE VIEW myData
AS 
SELECT *
FROM myData_New
UNION ALL
SELECT *
FROM myData_Original
;