改变自动增量的起始号码?

在MySQL中,我有一个表,我想设置auto_increment值为5而不是1 。 这是可能的,什么查询语句这样做?

您可以使用ALTER TABLE来更改auto_increment初始值:

 ALTER TABLE tbl AUTO_INCREMENT = 5; 

有关更多详细信息,请参阅MySQL参考 。

是的,您可以使用ALTER TABLE t AUTO_INCREMENT = 42语句。 但是,您需要知道,这将导致整个表的重build,至less在InnoDB和某些MySQL版本中是这样。 如果您有一个已经存在数百万行的数据集,则可能需要很长时间才能完成

根据我的经验,最好做到以下几点:

 BEGIN WORK; -- You may also need to add other mandatory columns and values INSERT INTO t (id) VALUES (42); ROLLBACK; 

这样, 即使您正在回滚事务,MySQL也会保留自动增量值,并立即应用更改。

您可以通过发出SHOW CREATE TABLE t语句来validation这一点。 你应该看到:

 > SHOW CREATE TABLE t \G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( ... ) ENGINE=InnoDB AUTO_INCREMENT=43 ... 

如何自动递增1,从10开始MySQL:

 create table foobar( id INT PRIMARY KEY AUTO_INCREMENT, moobar VARCHAR(500) ); ALTER TABLE foobar AUTO_INCREMENT=10; INSERT INTO foobar(moobar) values ("abc"); INSERT INTO foobar(moobar) values ("def"); INSERT INTO foobar(moobar) values ("xyz"); select * from foobar; '10', 'abc' '11', 'def' '12', 'xyz' 

这会自动将id列从1开始递增1。

在MySQL中自动递增5,从10开始:

 drop table foobar create table foobar( id INT PRIMARY KEY AUTO_INCREMENT, moobar VARCHAR(500) ); SET @@auto_increment_increment=5; ALTER TABLE foobar AUTO_INCREMENT=10; INSERT INTO foobar(moobar) values ("abc"); INSERT INTO foobar(moobar) values ("def"); INSERT INTO foobar(moobar) values ("xyz"); select * from foobar; '11', 'abc' '16', 'def' '21', 'xyz' 

这个自动将id列从5开始递增,从10开始。

自动修复表的AUTO_INCREMENT值的过程

 DROP PROCEDURE IF EXISTS update_auto_increment; DELIMITER // CREATE PROCEDURE update_auto_increment (_table VARCHAR(64)) BEGIN DECLARE _max_stmt VARCHAR(1024); DECLARE _stmt VARCHAR(1024); SET @inc := 0; SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(`id`), 0) + 1 INTO @inc FROM ', _table); PREPARE _max_stmt FROM @MAX_SQL; EXECUTE _max_stmt; DEALLOCATE PREPARE _max_stmt; SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT = ', @inc); PREPARE _stmt FROM @SQL; EXECUTE _stmt; DEALLOCATE PREPARE _stmt; END// DELIMITER ; CALL update_auto_increment('your_table_name') 

如果您需要使用可变字段名称而不是id这个过程,这可能会有所帮助:

 DROP PROCEDURE IF EXISTS update_auto_increment; DELIMITER // CREATE PROCEDURE update_auto_increment (_table VARCHAR(128), _fieldname VARCHAR(128)) BEGIN DECLARE _max_stmt VARCHAR(1024); DECLARE _stmt VARCHAR(1024); SET @inc := 0; SET @MAX_SQL := CONCAT('SELECT IFNULL(MAX(',_fieldname,'), 0) + 1 INTO @inc FROM ', _table); PREPARE _max_stmt FROM @MAX_SQL; EXECUTE _max_stmt; DEALLOCATE PREPARE _max_stmt; SET @SQL := CONCAT('ALTER TABLE ', _table, ' AUTO_INCREMENT = ', @inc); PREPARE _stmt FROM @SQL; EXECUTE _stmt; DEALLOCATE PREPARE _stmt; END // DELIMITER ; CALL update_auto_increment('your_table_name', 'autoincrement_fieldname'); 

你也可以使用phpmyadmin来完成。 只需select表格即可。 在表格选项下面更改自动增量。 不要忘了点击开始 在phpmyadmin中自动增加

只是用数据导出表…然后复制它的SQL像

 CREATE TABLE IF NOT EXISTS `employees` ( `emp_badgenumber` int(20) NOT NULL AUTO_INCREMENT, `emp_fullname` varchar(100) NOT NULL, `emp_father_name` varchar(30) NOT NULL, `emp_mobile` varchar(20) DEFAULT NULL, `emp_cnic` varchar(20) DEFAULT NULL, `emp_gender` varchar(10) NOT NULL, `emp_is_deleted` tinyint(4) DEFAULT '0', `emp_registration_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `emp_overtime_allowed` tinyint(4) DEFAULT '1', PRIMARY KEY (`emp_badgenumber`), UNIQUE KEY `bagdenumber` (`emp_badgenumber`), KEY `emp_badgenumber` (`emp_badgenumber`), KEY `emp_badgenumber_2` (`emp_badgenumber`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=111121326 ; 

现在改变自动递增值并执行sql。