7
votes

Comment conserver des données lors de la modification des types de données de colonne dans MySQL?

Par exemple, supposons que j'ai une colonne tinyint que je souhaite passer en un Enum . Est-il possible d'écrire une requête MySQL qui modifie le type de données de la colonne tout en mappant les données existantes afin que (par exemple) 0 devient non , 1 devient oui et 2 devient peut-être ?


0 commentaires

3 Réponses :


1
votes

Créer la nouvelle colonne à côté de l'ancienne colonne, utilisez une mise à jour pour déplacer les données sur, puis supprimer la colonne d'origine.


0 commentaires

8
votes

Je ne sais pas si cela est possible dans MySQL, mais une solution alternative serait de:

  1. Ajoutez la nouvelle colonne avec le nouveau type avec un nouveau nom
  2. Définissez les nouvelles valeurs de colonne (étant donné les valeurs anciennes de colonne)
  3. déposer la vieille colonne
  4. renommer la nouvelle colonne pour avoir le même nom que l'ancienne colonne

2 commentaires

Bien. J'étais un peu en espérant une super-requête complexe de costume, mais cela devrait faire l'affaire. :)


En cas de doute, faites-le le moyen simple :-)



0
votes

Ceci nécessite une séquence de 4 étapes- Ajoutez une nouvelle colonne, définissez les données dans la nouvelle colonne, déposez une colonne ancienne, renommez la nouvelle colonne

Use [Databasename]
Go
ALTER table [tableName]
Add [newColumnname] datatype
GO
Update [tableName] SET [newColumnname] = [oldColumnname]
GO
ALTER table [tableName] Drop Column [oldColumnname]
GO
EXEC sp_RENAME 'tableName.newColumnname' , 'oldColumnname', 'COLUMN'
GO


0 commentaires