Php 如何清除SQL中的自动递增列并插入一组从1开始的新数字?

Php 如何清除SQL中的自动递增列并插入一组从1开始的新数字?,php,mysql,sql,database,auto-increment,Php,Mysql,Sql,Database,Auto Increment,我正在从事一个项目,该项目从多个来源获取联系人信息,并将这些数据插入SQL表中。为了获得更好的上下文,我目前使用这里描述的方法分别提取每个源的数据- 因为联系人的数量可能会发生变化,所以我决定在添加第一个源的数据之前完全清除该表。每个后续来源的数据都是在插入之前使用此语句添加的-从newsstation='NBC San Diego'所在的人中删除的 为了防止自动递增列从上次生成的数字开始计数,我在插入数据之前将第一个源的数据设置为TRUNCATE TABLE people。现在我已经将多个数据

我正在从事一个项目,该项目从多个来源获取联系人信息,并将这些数据插入SQL表中。为了获得更好的上下文,我目前使用这里描述的方法分别提取每个源的数据-

因为联系人的数量可能会发生变化,所以我决定在添加第一个源的数据之前完全清除该表。每个后续来源的数据都是在插入之前使用此语句添加的-
从newsstation='NBC San Diego'
所在的人中删除的

为了防止自动递增列从上次生成的数字开始计数,我在插入数据之前将第一个源的数据设置为
TRUNCATE TABLE people
。现在我已经将多个数据源添加到表中,我已经将第一个数据源的清除方法从
TRUNCATE table people
更改为
DELETE from people WHERE newstation='San Diego CW 6'

问题是,将来每当我更新这些源中的任何一个时,自动增量列都会继续从生成的最后一个数字开始计数,而不是从自动增量列中找到的最大数字开始计数

是否有任何方法可以有效地仅截断自动递增列并插入一组从1开始的新数字?我甚至想知道是否有一种方法可以让我删除自动增量列并添加一个新的自动增量列来解决这个问题

我知道在这个网站上有很多类似的问题,但是在经过长时间的搜索以找到这个问题的答案后,我发现没有一种方法适用于这种特殊情况

重新启动mysqld时,InnoDB表的当前“下一步”自动增量将重置为自动增量列中的当前最大值。因此,最简单的解决方案是
/etc/init.d/mysql*重启
。虽然这可能会中断服务,所以让我们考虑其他选项。

您可以
截断表
,这将自动增量值重置回1。但是,如果要删除部分行而不是全部行,这不是正确的解决方案

您可以使用ALTER TABLE更改自动增量值:

ALTER TABLE mytable AUTO_INCREMENT=1;
即使表中还有其他行,也可以安全地将其设置为值
1
。它将自动调整到表中当前的最大值

例如:

mysql> insert into mytable values (42);

mysql> insert into mytable values (142);

mysql> delete from mytable where id > 100;

mysql> show create table mytable\G

CREATE TABLE `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=143 DEFAULT CHARSET=latin1
正如预期的那样,尽管我们删除了最后一行,自动增量仍然是143。现在,让我们调整自动增量:

mysql> alter table mytable auto_increment=1;

mysql> show create table mytable\G

CREATE TABLE `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=latin1

看到了吗?它自我调整为大于id=42的行。

结果比我想象的简单得多

将任何源数据添加到表中后,我使用以下代码从表中删除自动增量列

ALTER TABLE people DROP COLUMN number
…然后我添加一个新的自动增量列来替换它

ALTER TABLE people ADD number INT( 100 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST

请参见以下问题:[重置自动增量][1][1]: