Dan*_*uis 502
您可以使用ALTER TABLE更改auto_increment初始值:
ALTER TABLE tbl AUTO_INCREMENT = 5;
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅MySQL参考.
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)
Eri*_*ski 11
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.
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开始.
自动修复表的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)