Erro ao renomear uma coluna no MySQL

434

Como renomear uma coluna na tabela xyz? As colunas são:

Manufacurerid, name, status, AI, PK, int

Eu quero renomear para manufacturerid

Tentei usar o painel PHPMyAdmin, mas recebo este erro:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)
Bharanikumar
fonte
5
Você está tentando alterar uma tabela que tenha uma referência de chave estrangeira.
mellowsoon
2
possível duplicata de renomear as colunas de chave estrangeira no MySQL
OMG Pôneis

Respostas:

747

O Lone Ranger está muito próximo ... na verdade, você também precisa especificar o tipo de dados da coluna renomeada. Por exemplo:

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

Lembrar :

  • Substitua INT por qualquer que seja o tipo de dados da sua coluna (NECESSÁRIO)
  • Tilde / Backtick (`) é opcional
Matt Diamond
fonte
12
Eu acho que a coluna contém uma chave estrangeira para obter o erro da resposta, então você deve soltar a chave estrangeira, alterar a tabela e adicionar chave estrangeira (é melhor fazer backup primeiro) e você pode alterá-lo alterando apenas o nome com o botão direito em cima da mesa - alter table
Chris Sim #
7
Lembre-se de que nesta solução você perde todas as outras definições de coluna, como nulidade, valor padrão etc. (consulte: stackoverflow.com/questions/8553130/… ).
Dejan #
Então, basicamente, em vez de MODIFY column <TYPE>(para redefinir uma coluna), é CHANGE column new_column <TYPE>?
mwfearnley
SHOW CREATE TABLE table_namepode ajudar você a descobrir definição da coluna atual
Sr. Imortal
@ Dejan obrigado e isso é realmente irritante, por que exigir um tipo quando você não pode especificar outros modificadores? Exija um tipo + modificadores ou não exija.
JMac #
43

A declaração de renomeação padrão do Mysql é:

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

para este exemplo:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Referência: sintaxe do MYSQL 5.1 ALTER TABLE

dongpf
fonte
40

PARA MYSQL:

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

PARA ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;
mahbub_siddique
fonte
3
Não funciona se você usar "os nomes das colunas do MySQL. Não use nada ou `.
Alexis #
13

EDITAR

Você pode renomear campos usando:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

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

Arqueiro Solitário
fonte
1
# 1064 - Você tem um erro na sua sintaxe SQL; verifique o manual que corresponde à versão do servidor MySQL para a sintaxe correta a ser usada perto de '' na linha 1
Bharanikumar
17
Isso seria útil, mas não é verdade para a documentação que você citou: "Quando você usa CHANGE ou MODIFY, a definição de coluna deve incluir o tipo de dados e todos os atributos que devem ser aplicados à nova coluna Atributos [...] presentes na definição original mas não especificado para a nova definição não são transportados adiante. "
artfulrobot 19/01
tem que ser "ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype (length)"
Chris Sim
7

Há um problema de sintaxe, porque a sintaxe correta para alterar o comando é ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;

Darshan
fonte
2

Com o MySQL 5.x você pode usar:

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

Renomeando uma coluna no MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;
Hasib Kamal
fonte
0

ALTER TABLE CHANGE;

Exemplo:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;
vaquar khan
fonte
-5

SINTAXE

altere a tabela nome_da_tabela renomeie a coluna nome da coluna antiga para o novo nome da coluna ;

Exemplo:

alter table biblioteca coluna renomeação custo de preço ;

Abinaya
fonte
2
No mysql, RENAME é usado para renomear tabela e não uma coluna; para renomear uma coluna, use CHANGE.
Jayin 27/05
A pergunta é para o MySQL - essa sintaxe não é válida no MySQL.
tjbp
Como outros observam, use sintaxe válida do MySQL.
fool4jesus
Há sintaxe mysql inválida.
Hasib Kamal