J'ai une table avec une colonne ENUM appelée Lorsque j'essaie de modifier la colonne avec le nouvel ensemble de valeurs, il s'agit d'une erreur
S'il vous plaît suggérer comment puis-je supprimer les valeurs requises. P> action code>. Les valeurs autorisées sont actuellement:
ACT1, ACT2, ACT3, ACT4 CODE>. Je veux
act3 code> et
act4 code> à supprimer et que l'état actuel de mon tableau ne contient aucune ligne avec
act3 code> ou
act4 code> . p>
Data tronquées pour l'action de colonne code>. p>
3 Réponses :
Utilisation de Toutefois, pour supprimer les valeurs d'énum, la meilleure option est de créer une nouvelle colonne pour effectuer le changement. P> alter Table code> pour l'ajout de valeurs ENUM est OK et décrit dans le MySQL Documentation .
+------+-----+
| ENUM | INT |
+======+=====+
| act1 | 0 |
+------+-----+
| act2 | 1 |
+------+-----+
"Vous devriez utiliser int plutôt." - Pourquoi?
@Barmar 8 raisons pour lesquelles le type de données de MySQL enum Est le mal Tombom l'a déjà mentionné. Je suggère d'utiliser un mappage entre vos valeurs d'énorme "ACT1" et "ACT2" et INT Valeurs 0, 1.
@Florianparain Je me demande pourquoi il devrait y avoir des avantageux de ne pas modifier la colonne existante, mais plutôt d'ajouter une temporaire. Pouvez-vous raisonner votre déclaration? Merci!
exécuter d'abord une requête.
ALTER TABLE table_name CHANGE action action ENUM( 'act1', 'act2' );
Il a dit qu'il n'y a pas de rangs avec les valeurs qu'il va supprimer.
Je ne suis pas obligé de faire les étapes ci-dessus car ma table ne contient pas de lignes avec "ACT3" et "ACT4". L'erreur est toujours là.
Les deux autres réponses ont déjà couvert la question de plus en détail, mais voici un problème simple pourquoi vous em> peut ne pas être en mesure de simplement faire la table. Si vous avez une énumération ('bar', 'foo', "removeme") et cela donne une erreur disant à dire quelque chose dans le sens des données tronquées quelque chose, vous pouvez déjà avoir une entrée définie sur le membre très ENum que vous souhaitez supprimer. Donc, vous avez d'abord besoin de faire quelque chose comme p>
Mettez à jour votre jeu de carte Enumrow = 'foo' où Y VendenumRow = 'Removeme'; P>
blockQuote>
De cette façon, toutes les entrées qui avaient Removeme seront désormais foo et la table peut être modifiée en utilisant p>
ALTER TABLE TABLE VÊMEDABLE CHANGEMENT VÊNUMROW YURENUMROW ENUM ('FOO', 'BAR') NULL par défaut; P>
blockQuote>
Peut-être n'utilisez pas d'énum? Komlenic.com/244/8-Reasons -Pourquoi MYSQLS-ENUM-DATA-TYPE-TYPE-IST-EVALIER
Montrez votre table Créer et modifier des déclarations de table.