2011-06-05 37 views
2

我在我的数据库中约30桌:如何更改在我的数据库中的所有表使用AUTO_INCREMENT = 1

table1table2table3table4table5

我希望所有的表使用AUTO_INCREMENT=1,如何我是否修改表格?

以下是其中一个表的示例DDL。我从来没有在任何表中定义AUTO_INCREMENT,它默认获取该值。

CREATE TABLE `amenities` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; 

回答

4

要更改AUTO_INCREMENT计数器的值要用于新行,这样做:

ALTER TABLE `table_name` AUTO_INCREMENT = 1; 

更新所有31个表,你可以使用这个PHP脚本:

<?php 
$tables = array('table1','table2','tableX'); //continue here 
foreach($tables as $update) 
{ 
    mysql_query("ALTER TABLE `".$update."` AUTO_INCREMENT = 1;"); 
} 
?> 
+0

我必须重复该代码30次我所有的30个表吗? – 2011-06-05 11:39:23

+2

是的,但这就是他们邀请复制/粘贴的内容。 :) – GolezTrol 2011-06-05 11:40:35

5
select concat('alter table ',table_name,' auto_increment = 1;') 
from information_schema.tables 
where table_schema = 'your_db'; 

然后运行生成的输出。 顺便说一下,这是一个奇怪的问题。如果您使用truncate table_name,您的auto_increment值将从1重新开始。

编辑。您可以使用outfile来重定向txt文件中的查询,然后再调用它。

select concat('alter ',table_name,' auto_increment = 1;') 
into outfile 'd:/queries.txt' 
lines terminated by '\r\n' 
from information_schema.tables 
where table_schema = 'your_db' 
相关问题