更改自动增量起始编号?

Joh*_*nes 254 mysql

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

Dan*_*uis 502

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

ALTER TABLE tbl AUTO_INCREMENT = 5;
Run Code Online (Sandbox Code Playgroud)

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

  • 澄清:将初始值设置为5意味着下一个插入将为5. (14认同)
  • 有人知道是否有可能没有更改? (6认同)
  • 是的,这是可能的.看到我的回复. (3认同)
  • MySQL 5.6有一个错误,不允许你减少`AUTO_INCREMENT`值,但它已在5.6.16和5.7.4中修复,请参阅http://bugs.mysql.com/bug.php?id= 69882 (3认同)
  • 如果您这样做,请查看cosimo关于正在重建的桌子的警告! (2认同)

Cos*_*imo 91

是的,您可以使用该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;
Run Code Online (Sandbox Code Playgroud)

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

您可以通过发出SHOW CREATE TABLE t声明来验证这一点.你应该看到:

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

  • 谢谢!`SET foreign_key_checks = 0;`对此也很有用. (5认同)
  • @cosimo,等等,这不是****无证**?手册是否应该以这种方式工作?如果不是,它可能会破坏不同的(未来)mysql设置. (2认同)
  • @Pacerier 是的,你是对的。这取决于 MySQL 当前的工作方式。将来可能不会像那样工作。鉴于 MySQL 的历史,我认为它会继续以这种方式工作很长时间。 (2认同)

Eri*_*ski 11

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

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'
Run Code Online (Sandbox Code Playgroud)

此自动将id列从10开始递增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'
Run Code Online (Sandbox Code Playgroud)

此自动每次将id列增加5,从10开始.


小智 8

您也可以使用 phpmyadmin 来完成此操作。只需选择表格即可执行操作。并更改表选项下方的自动增量。不要忘记点击开始 phpmyadmin 中的自动增量


Zhi*_*mir 5

自动修复表的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')
Run Code Online (Sandbox Code Playgroud)