Erreur de changement de nom d'une colonne dans MySQL


434

Comment renommer une colonne dans un tableau xyz? Les colonnes sont:

Manufacurerid, name, status, AI, PK, int

Je veux renommer manufacturerid

J'ai essayé d'utiliser le panneau PHPMyAdmin, mais j'obtiens cette erreur:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)

5
Vous essayez de modifier une table contenant une référence de clé étrangère.
mellowsoon

2
duplication possible des colonnes
OMG Ponies

Réponses:


747

Lone Ranger est très proche ... en fait, vous devez également spécifier le type de données de la colonne renommée. Par exemple:

ALTER TABLE `xyz` CHANGE `manufacurerid` `manufacturerid` INT;

Rappelles toi :

  • Remplacez INT par le type de données de votre colonne (OBLIGATOIRE)
  • Tilde / Backtick (`) est facultatif

12
Je pense que la colonne contient une clé étrangère pour obtenir l'erreur de la réponse, vous devez donc supprimer la clé étrangère, modifier la table et ajouter une clé étrangère (il est préférable de sauvegarder d'abord) et vous pouvez la modifier en changeant uniquement le nom en un clic droit sur la table - alter table
Chris Sim

7
Gardez à l'esprit que dans cette solution, vous perdez toutes les autres définitions de colonne telles que la nullité, la valeur par défaut, etc. (voir: stackoverflow.com/questions/8553130/… ).
Dejan

Donc, fondamentalement, au lieu de MODIFY column <TYPE>(pour redéfinir une colonne), c'est CHANGE column new_column <TYPE>?
mwfearnley

SHOW CREATE TABLE table_namepeut vous aider à comprendre la définition actuelle de la colonne
M. Deathless

@Dejan merci et c'est vraiment ennuyeux, pourquoi exiger un type lorsque vous ne pouvez pas spécifier d'autres modificateurs? Soit vous avez besoin d'un type + modificateurs soit vous n'en avez pas besoin du tout.
JMac

43

L'instruction de changement de nom standard de Mysql est:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
CHANGE [COLUMN] old_col_name new_col_name column_definition 
[FIRST|AFTER col_name]

pour cet exemple:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Référence: MYSQL 5.1 ALTER TABLE Syntaxe


40

POUR MYSQL:

ALTER TABLE `table_name` CHANGE `old_name` `new_name` VARCHAR(255) NOT NULL;

POUR ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;

3
Cela ne fonctionne pas si vous utilisez "les noms de colonne pour MySQL. N'utilisez rien ou `à la place.
Alexis No

13

ÉDITER

Vous pouvez renommer des champs en utilisant:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html


1
# 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de '' à la ligne 1
Bharanikumar

17
Ce serait utile, mais ce n'est pas vrai dans la documentation que vous avez citée: "Lorsque vous utilisez CHANGE ou MODIFY, column_definition doit inclure le type de données et tous les attributs qui doivent s'appliquer à la nouvelle colonne [...] Attributs présents dans la définition d'origine mais non spécifiés pour la nouvelle définition ne sont pas reportés. "
artfulrobot

il doit être "ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype (length)"
Chris Sim

7

Il y a un problème de syntaxe, car la bonne syntaxe pour modifier la commande est ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;


2

Avec MySQL 5.x, vous pouvez utiliser:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;

1

Renommer une colonne dans MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

ALTER TABLE CHANGE;

Exemple:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

SYNTAXE

modifier la table nom_table renommer la colonne ancien nom de colonne en nouveau nom de colonne ;

Exemple:

modifier la bibliothèque de tables renommer le coût de la colonne en prix ;


2
Dans mysql, RENAME est utilisé pour renommer une table et non une colonne, pour renommer une colonne, utilisez CHANGE.
jathin

La question est pour MySQL - ce n'est pas une syntaxe valide dans MySQL.
tjbp

Comme d'autres le notent, veuillez utiliser une syntaxe MySQL valide.
fool4jesus

Il y a une syntaxe mysql invalide.
Hasib Kamal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.