【问题标题】:How to prevent mySQL autoincrement from resetting in Django如何防止 mySQL 自动增量在 Django 中重置
【发布时间】:2021-06-02 09:49:10
【问题描述】:

我正在创建一个主键是 AutoFields 的 Django 应用程序。即我没有手动将任何字段分配为模型中的主键。

我需要使用 mySQL。

我需要不时将所有数据导出到 excel 或另一个 django 应用程序。因此,主键必须是唯一的,才能在 excel/其他应用程序中识别新记录或要删除的记录。

但是,我读到 mySQL 自动增量计数器会在数据库重新启动时重置为最大键。如果删除了最新记录,这将导致重新分配键。

我需要避免这种情况。不应重新分配任何键。

如何做到这一点?

【问题讨论】:

标签: mysql django mysql-python django-mysql


【解决方案1】:

MySQL 8.0 现在永久保留每个表的最后一个自动增量。所以它会在重启之间记住,并且不会重置自动增量。

https://www.percona.com/blog/2018/10/08/persistence-of-autoinc-fixed-in-mysql-8-0/

【讨论】:

  • MySQL 8.0 现在永久保留每个表的最后一个自动增量。 依赖于引擎(至少)。
  • 所以 Django 文档中的这段文字已经过时了? docs.djangoproject.com/en/3.1/ref/databases/#storage-engines
  • 除非文档旨在支持仍在使用 MySQL 5.x 的项目。自然,当一个产品的重大新版本出来时,每个人都需要几年的时间来升级。
  • mysql 文档的链接是:dev.mysql.com/doc/refman/8.0/en/…
  • @Akina,是的,这是对 InnoDB 的增强,因为 InnoDB 存在自动重置问题。此问题不影响 MySQL 早期版本中的 MyISAM。如果您指的是第三方存储引擎,它们每个都有自己的任务来实现类似的东西。