En MySQL, j’ai une table et je veux définir la valeur auto_increment
à 5
au lieu de 1
. Est-ce possible et quelle requête fait cela?
Vous pouvez utiliser ALTER TABLE
pour modifier la valeur initiale de auto_increment:
ALTER TABLE tbl AUTO_INCREMENT = 5;
Voir la référence MySQL pour plus de détails.
Oui, vous pouvez utiliser l’instruction ALTER TABLE t AUTO_INCREMENT = 42
. Cependant, vous devez être conscient que cela entraînera la reconstruction de votre table entière, au moins avec InnoDB et certaines versions de MySQL. Si vous possédez déjà un jeu de données comportant des millions de lignes, son exécution peut prendre beaucoup de temps .
Dans mon expérience, il est préférable de faire ce qui suit:
BEGIN WORK; -- You may also need to add other mandatory columns and values INSERT INTO t (id) VALUES (42); ROLLBACK;
De cette manière, même si vous annulez la transaction, MySQL conservera la valeur d’incrémentation automatique et la modification sera appliquée instantanément.
Vous pouvez le vérifier en émettant une instruction SHOW CREATE TABLE t
. Tu devrais voir:
> SHOW CREATE TABLE t \G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( ... ) ENGINE=InnoDB AUTO_INCREMENT=43 ...
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'
Cette auto incrémente la colonne id de 1 à partir de 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'
Cette auto incrémente la colonne id de 5 à chaque fois, en commençant à 10.
Procédure de correction automatique de la valeur AUTO_INCREMENT de la table
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')
Si vous avez besoin de cette procédure pour les noms de champs variables au lieu de id
cela pourrait être utile:
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');
Vous pouvez également le faire en utilisant phpmyadmin. Il suffit de sélectionner la table plutôt que d’aller aux actions. Et changez l’incrémentation automatique en dessous des options du tableau. N’oubliez pas de cliquer sur start
il suffit d’exporter la table avec des données .. puis copiez son sql comme
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 ;
maintenant changez la valeur d’incrémentation automatique et exécutez sql.