@VasiliiSuricov You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.source S'il n'y a pas de valeur supérieure à ce que vous souhaitez définir votre auto_incrementcolonne ed, vous pouvez également diminuer la valeur. ( documentation mysql )
seyfahni
Réponses:
520
Vous pouvez utiliser ALTER TABLEpour modifier la valeur initiale auto_increment:
Quelqu'un sait s'il est possible de faire SANS ALTER?
thesmart
3
Oui c'est possible. Voir ma réponse.
Cosimo
3
MySQL 5.6 avait un bug qui ne vous permettait pas de diminuer la AUTO_INCREMENTvaleur, mais il a été corrigé dans 5.6.16 et 5.7.4, voir bugs.mysql.com/bug.php?id=69882
Daniel Vandersluis
3
Jetez un œil à l'avertissement de cosimo concernant la table en cours de reconstruction si vous faites cela!
h00ligan
15
Pour clarifier: la définition de la valeur initiale à 5 signifie que la prochaine insertion sera 5.
Steen Schütt
97
Oui, vous pouvez utiliser la ALTER TABLE t AUTO_INCREMENT = 42déclaration. 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 avez un ensemble de données déjà existant avec des millions de lignes, cela peut prendre beaucoup de temps .
D'après mon expérience, il vaut mieux faire ce qui suit:
BEGIN WORK;-- You may also need to add other mandatory columns and valuesINSERTINTO t (id)VALUES(42);ROLLBACK;
De cette façon, 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 SHOW CREATE TABLE tdéclaration. Tu devrais voir:
> SHOW CREATETABLE t \G***************************1.row***************************Table: tCreateTable:CREATETABLE`t`(...) ENGINE=InnoDB AUTO_INCREMENT=43...
MERCI! SET foreign_key_checks = 0;est également utile pour cela.
dnozay
Idée brillante! Nitpick: SHOW CREATE TABLE tretournera réellement 43, c'est-à-dire la valeur suivante après l'insertion 42.
petrkotek
2
@ cosimo, Attendez, n'est-ce pas sans papiers ? Le manuel a-t-il dit qu'il devrait fonctionner de cette façon? Sinon, cela peut casser dans une configuration mysql (future) différente.
Pacerier
1
@Pacerier oui, vous avez raison. Cela dépend de la façon dont MySQL fonctionne actuellement. Cela pourrait ne pas fonctionner comme ça à l'avenir. Compte tenu de l'historique de MySQL, je suppose qu'il continuera de fonctionner de cette façon pendant longtemps.
Cosimo
@cosimo, j'espère qu'ils le documenteront afin qu'un code fiable puisse réellement utiliser ce bon hack. Pour l'instant, le code qui veut être fiable ne peut pas l'utiliser.
Pacerier
13
Comment incrémenter automatiquement d'un, à partir de 10 dans MySQL:
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'10','abc''11','def''12','xyz'
Cette auto incrémente la colonne id d'une unité à partir de 10.
Incrémentation automatique dans MySQL de 5, à partir de 10:
droptable foobarcreatetable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));SET@@auto_increment_increment=5;ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'11','abc''16','def''21','xyz'
Cette incrémentation automatique de la colonne id de 5 à chaque fois, à partir de 10.
Vous pouvez également le faire en utilisant phpmyadmin. Sélectionnez simplement le tableau et passez aux actions. Et modifiez l'incrémentation automatique sous les options du tableau. N'oubliez pas de cliquer sur démarrer
You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.
source S'il n'y a pas de valeur supérieure à ce que vous souhaitez définir votreauto_increment
colonne ed, vous pouvez également diminuer la valeur. ( documentation mysql )Réponses:
Vous pouvez utiliser
ALTER TABLE
pour modifier la valeur initiale auto_increment:Voir la référence MySQL pour plus de détails.
la source
AUTO_INCREMENT
valeur, mais il a été corrigé dans 5.6.16 et 5.7.4, voir bugs.mysql.com/bug.php?id=69882Oui, vous pouvez utiliser la
ALTER TABLE t AUTO_INCREMENT = 42
déclaration. 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 avez un ensemble de données déjà existant avec des millions de lignes, cela peut prendre beaucoup de temps .D'après mon expérience, il vaut mieux faire ce qui suit:
De cette façon, 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
SHOW CREATE TABLE t
déclaration. Tu devrais voir:la source
SET foreign_key_checks = 0;
est également utile pour cela.SHOW CREATE TABLE t
retournera réellement43
, c'est-à-dire la valeur suivante après l'insertion42
.Comment incrémenter automatiquement d'un, à partir de 10 dans MySQL:
Cette auto incrémente la colonne id d'une unité à partir de 10.
Incrémentation automatique dans MySQL de 5, à partir de 10:
Cette incrémentation automatique de la colonne id de 5 à chaque fois, à partir de 10.
la source
Procédure de correction automatique de la valeur AUTO_INCREMENT de la table
la source
Si vous avez besoin de cette procédure pour les noms de champs variables au lieu de
id
cela, cela pourrait être utile:la source
Vous pouvez également le faire en utilisant phpmyadmin. Sélectionnez simplement le tableau et passez aux actions. Et modifiez l'incrémentation automatique sous les options du tableau. N'oubliez pas de cliquer sur démarrer
la source
il suffit d'exporter la table avec des données .. puis de copier son sql comme
maintenant changez la valeur d'incrémentation automatique et exécutez sql.
la source