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


当前回答

是的,你可以使用ALTER TABLE t AUTO_INCREMENT = 42语句。然而,你需要意识到这将导致重建你的整个表,至少在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语句来验证这一点。你应该看到:

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

其他回答

你可以使用ALTER TABLE来改变auto_increment的初始值:

ALTER TABLE tbl AUTO_INCREMENT = 5;

有关更多细节,请参阅MySQL参考。

过程自动修复表的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')

是的,你可以使用ALTER TABLE t AUTO_INCREMENT = 42语句。然而,你需要意识到这将导致重建你的整个表,至少在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语句来验证这一点。你应该看到:

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

只需导出表的数据.. 然后复制它的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 ;

现在更改auto increment value并执行sql。

也可以使用phpmyadmin。只需选择表格,然后进入操作。并更改表选项下面的自动增量。别忘了点击开始