Le problème de l'impossibilité de définir l'incrémentation automatique des colonnes existe dans MySql
P粉998100648
2023-08-22 16:23:53
<p>J'ai une table nommée "Bestelling" avec 4 colonnes : "Id" (clé primaire), "KlantId", "Datum", "BestellingsTypeId", maintenant je veux que l'ID de colonne soit automatiquement incrémenté, mais, quand J'essaie de le faire et j'obtiens l'erreur suivante : </p>
<pre class="brush:php;toolbar:false;">ERREUR 1062 : ALTER TABLE a provoqué une réorganisation par incrémentation automatique, entraînant une entrée en double « 1 » pour la clé primaire « PRIMARY »
Instruction SQL :
ALTER TABLE `aafest`.`aafest_bestelling` CHANGER DE COLONNE `Id` `Id` INT(11) NON NULL AUTO_INCREMENT
ERREUR : une erreur s'est produite lors de l'exécution du script de restauration. Les détails sont ci-dessous.
ERREUR 1046 : aucune base de données sélectionnée
Instruction SQL :
CRÉER TABLE `aafest_bestelling` (
`Id` int(11) NON NULL,
`KlantId` int(11) NULL PAR DÉFAUT,
Date de « donnée » PAR DÉFAUT NULL,
`BestellingstypeId` int(11) NULL PAR DÉFAUT,
CLÉ PRIMAIRE (`Id`)
) MOTEUR=InnoDB DEFAULT CHARSET=latin1</pre>
<p> Quelqu'un a-t-il des idées ? </p>
J'ai également eu ce problème lorsque j'ai essayé de convertir une colonne en auto_increment, l'une des lignes avait une valeur de 0. Une alternative consiste à définir :
Pour mettre en place la séance.
Cela changera la colonne en un auto_increment avec zéro ID.
Zéro n'est pas idéal et je ne recommande pas de l'utiliser dans les colonnes auto_increment. Malheureusement, cela fait partie de l'ensemble de données hérité, je ne peux donc pas le modifier pour l'instant.
Il est préférable d'effacer les paramètres (et autres paramètres) par la suite :
Bien qu'il soit effacé à la fermeture de la session client en cours.
Tous les détails sur le paramètre 'NO_AUTO_VALUE_ON_ZERO' ici.
Cela se produit si la table contient un enregistrement existant avec un identifiant de 0 (ou un nombre négatif). La mise à jour de tous les enregistrements existants pour utiliser des valeurs positives permettra de définir auto_increment sur cette colonne.
Edit : Certaines personnes ont demandé comment 0 apparaissait. Pour clarifier, le manuel de référence MySQL indique : "Pour les types numériques, la valeur par défaut est 0, mais pour les types entiers ou à virgule flottante avec l'attribut AUTO_INCREMENT, la valeur par défaut est la valeur suivante dans la séquence." avant d'activer auto_increment dans Lors de l'exécution d'une insertion sur une table sans fournir de valeur pour une colonne numérique, la valeur par défaut de 0 est utilisée lors de l'insertion. Plus de détails peuvent être trouvés sur https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html.