如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]
Posted
技术标签:
【中文标题】如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]【英文标题】:How to clear the auto-increment column in SQL and insert a new set of numbers starting from 1? [duplicate] 【发布时间】:2014-12-19 13:22:15 【问题描述】:我正在从事一个项目,该项目从多个来源抓取联系信息并将该数据插入到 SQL 表中。为了获得更好的上下文,我目前使用此处描述的方法-How do I account for missing xPaths and keep my data uniform when scraping a website using DOMXPath query method? 分别提取每个源的数据。
因为联系人的数量有可能发生变化,所以我决定在添加第一个来源的数据之前彻底清除表格。在插入之前使用此语句添加每个后续源的数据 - DELETE FROM people WHERE newsstation='NBC San Diego'
。
为了防止自动增量列开始对最后生成的数字进行计数,我在插入数据之前将第一个源的数据设置为TRUNCATE TABLE people
。既然我有多个源被添加到表中,我将第一个数据源的清除方法从TRUNCATE TABLE people
更改为DELETE FROM people WHERE newsstation='San Diego CW 6'
。
问题是,每当我以后更新这些源中的任何一个时,自动增量列都会继续从最后生成的数字开始计数,而不是从自动增量列中找到的 MAX 数字开始计数。
有什么方法可以有效地仅截断自动增量列并从 1 开始插入一组新数字?我什至想知道是否有办法让我只删除自动增量列并添加一个新的自动增量列来解决这个问题?
我知道这个网站上有很多类似的问题,但是经过大量搜索以找到这个问题的答案后,我发现没有一种方法适用于这种特殊情况。
【问题讨论】:
看到这个问题:[Reset AutoIncrement][1] [1]: ***.com/questions/510121/… 【参考方案1】:当您重新启动 mysqld 时,InnoDB 表的当前“下一个”自动增量会重置自动增量列中的当前 MAX 值。所以最简单的解决方案是/etc/init.d/mysql* restart
。虽然这可能会中断服务,但让我们考虑其他选项。
您可以TRUNCATE TABLE
,这会将自动增量值重置为 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
正如预期的那样,即使我们删除了最后一行,auto_increment 仍然是 143。现在让我们调整 auto_increment:
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 的行。
【讨论】:
【参考方案2】:答案最终比我想象的要简单得多。
将任何源的数据添加到表后,我使用以下代码从表中删除自动增量列...
ALTER TABLE people DROP COLUMN number
...然后我添加一个新的自动增量列来替换它...
ALTER TABLE people ADD number INT( 100 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
【讨论】:
以上是关于如何清除SQL中的自增列并插入一组从1开始的新数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章