MySQL PhpMyAdmin : Alter AUTO_INCREMENT and/or INSERT_ID

标签 mysql phpmyadmin auto-increment insert-id

我有一个发票表,它为每张发票存储一条记录,id 列 (int AUTO_INCREMENT) 是主键,也是发票引用号。

现在,不幸的是,我不得不手动迁移一些在旧系统上生成的发票,这些发票具有五位数 ID,而不是当前系统使用的四位数 ID。

但是,即使我通过 PhpMyAdmin(表操作)将 AUTO_INCREMENT 重置回下一个四位数 ID,它仍然会插入一个五位数的 1,即表中当前较高的 ID 加一。

通过搜索,似乎我实际上需要更改 insert_id 以及 AUTO_INCREMENT ?我尝试执行 ALTER TABLE invoices SET insert_id=8125 以及 ALTER TABLE invoices insert_id=8125 但这些命令似乎都无效。

任何人都可以解释我可以重置 AUTO_INCREMENT 的正确方法,以便它将插入 ID 为 8125 的记录,然后当它到达 10962 时 它将跳过我手动添加的四个记录,并继续从 10966 开始的顺序 id。如果它不会跳过 10962 - 10966 那么这并不重要,因为公司每年不会生成那么多发票,所以这将发生在下一年因此希望不会引起问题。

对于我所处的这种棘手情况,如果能提供任何帮助,我将不胜感激!非常感谢

最佳答案

我建议的第一件事是放弃 PHPMyAdmin,因为它是用于 MySQL 的最糟糕的“应用程序”之一。获得适当的 GUI。我最喜欢的是SQLYog .

现在开始讨论这个问题。永远不要篡改主键,不要像您所说的那样尝试“重置”它或更新具有数据库生成的整数的列。至于为什么,这个话题很宽泛,可以在另一个问题中讨论,只是一旦设置好就永远不要触摸主键。

第二件事是有人正在删除发票记录,因此自动增量现在是 10k+ 而不是 8k+。这不是一件坏事,但如果您的发票需要顺序值(例如发票 1 和 5 之间不能有间隙),则使用一个名为 sequence_id 或 invoice_ref 的额外字段并使用触发器来计算该数字。不要依赖 auto_increment 功能,它会重用通过 DELETE 操作丢失的数字。

或者,您可以导出一直在使用的数据库,找到发票表的 CREATE TABLE 定义,然后找到显示“AUTO_INCREMENT = [some number]”的行"并删除该声明。导入到您的新数据库中,auto_increment 将从最新的发票继续。您可以使用 ALTER TABLE 执行相同的操作,但重新导入更安全。

关于MySQL PhpMyAdmin : Alter AUTO_INCREMENT and/or INSERT_ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092629/

相关文章:

java - 如何在python中返回包含sqlalchemy中的对象的列表,类似于java中的List<OrderInfo>

javascript - JS - 如何使用链式 promise 结束数据库连接

php - Mysql复杂排序依据

mysql - #1071 - 指定的 key 太长;最大 key 长度为 1000 字节

php - undefined variable : delete in C:\xampp\htdocs\xampp\Test\HRMS\try\search1. php 第 61 行

Node.js 中的 MySQL 回滚

MySQL : is the auto increment highest value always the most recent?

javascript - 使用javascript自动增加firebase中的值

java - 变量仅在第一次运行时递增?

c# - C#中如何从数据库中获取图片