Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL PhpMyAdmin:更改自动增量和/或插入ID_Mysql_Phpmyadmin_Auto Increment_Insert Id - Fatal编程技术网

MySQL PhpMyAdmin:更改自动增量和/或插入ID

MySQL PhpMyAdmin:更改自动增量和/或插入ID,mysql,phpmyadmin,auto-increment,insert-id,Mysql,Phpmyadmin,Auto Increment,Insert Id,我有一个invoices表,它为每个发票存储一条记录,id列(int AUTO_INCREMENT)是主键,也是发票参考号 现在,不幸的是,我不得不手动迁移在旧系统上生成的一些发票,这些发票具有五位数的id,而不是当前系统使用的四位数id 但是,即使我通过PhpMyAdmin(表操作)将自动增量重置回下一个四位数的id,它仍然会插入一个五位数的id,即表中当前较高的id加一 通过四处搜索,似乎我实际上需要更改insert\u id以及AUTO\u INCREMENT?我试图执行ALTER TAB

我有一个invoices表,它为每个发票存储一条记录,id列(
int AUTO_INCREMENT
)是主键,也是发票参考号

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

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

通过四处搜索,似乎我实际上需要更改
insert\u id
以及
AUTO\u INCREMENT
?我试图执行
ALTER TABLE invoices SET insert\u id=8125
以及
ALTER TABLE invoices insert\u id=8125
,但这两个命令似乎都无效

有谁能解释一下我重置
自动增量的正确方法,这样它将插入id为
8125
的记录,然后当它到达
10962
时,它将跳过我手动添加的四条记录,并继续从
10966
开始的顺序id。如果它不会跳过
10962
-
10966
,那么这并不重要,因为该公司每年不会生成那么多发票,因此这将在随后的一年发生,因此不会造成问题


我真的很感激任何人能帮我解决这个棘手的问题!非常感谢

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

现在来看看问题。永远不要篡改主键,不要像您所说的那样尝试“重置”主键,也不要更新包含由数据库生成的整数的列。至于为什么,这个话题很广泛,可以在另一个问题中讨论,只是在设置好主键后永远不要触摸它

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


或者,您可以做的是导出您一直在使用的数据库,找到invoices表的
CREATE TABLE
定义,并找到它显示“AUTO_INCREMENT=[some number]”的行,然后删除该语句。导入到新数据库中,自动增量将从最新的发票继续。使用ALTER TABLE也可以做到这一点,但是重新导入更安全。

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

现在来看看问题。永远不要篡改主键,不要像您所说的那样尝试“重置”主键,也不要更新包含由数据库生成的整数的列。至于为什么,这个话题很广泛,可以在另一个问题中讨论,只是在设置好主键后永远不要触摸它

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


或者,您可以做的是导出您一直在使用的数据库,找到invoices表的
CREATE TABLE
定义,并找到它显示“AUTO_INCREMENT=[some number]”的行,然后删除该语句。导入到新数据库中,自动增量将从最新的发票继续。您也可以使用ALTER TABLE进行同样的操作,但是重新导入更安全。

感谢您的宝贵见解。如果有一种“bodge job”方法可以正确执行此操作,而无需重新编码我的系统并添加额外的invoiceRef字段,那么这将是更好的选择。不幸的是,您概述的最后一个流程没有帮助,因为最新的发票(10k+)不是我希望从(8k+)开始继续编号的id。另外,更改
AUTO_INCREMENT
也没有效果,因为MySQL似乎忽略了它,并根据最新的发票id(这不是我在本例中需要的!)计算出下一个
insert_id
),这就是为什么如果必须重复使用发票参考号,AUTO_INCREMENT通常是错误的选择。它是一个代理主键,对数据库有意义,但对业务没有意义。如果唯一的问题是客户不喜欢看到发票之间的差距,那么这不仅仅是一个问题,更是一个麻烦。试图修复它可能会产生真正的问题!我建议不要对此采取任何行动,并尝试向你的客户解释背后的原因。如果这不起作用,那么创建另一个字段并重新编号发票就可以了。好吧,我已经成功地与我的客户进行了甜言蜜语,幸运的是,他很乐意继续使用10k+发票编号。尽管将来我将只使用
id int AUTO_INCREMENT
进行数据库管理和外键等,而不是向用户显示的字段!谢谢你的帮助,谢谢你的宝贵见解。如果有一种“bodge job”方法可以正确执行此操作,而无需重新编码我的系统并添加额外的invoiceRef字段,那么这将是更好的选择。不幸的是,您所概述的最后一个流程没有帮助,因为它是最新的发票