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)
Bharanikumar
la source
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
Diamant mat
la source
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

dongpf
la source
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`;
mahbub_siddique
la source
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

Ranger solitaire
la source
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;

Darshan
la source
2

Avec MySQL 5.x, vous pouvez utiliser:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;
MIKE KIM
la source
1

Renommer une colonne dans MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;
Hasib Kamal
la source
0

ALTER TABLE CHANGE;

Exemple:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;
vaquar khan
la source
-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 ;

Abinaya
la source
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