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)

5
Você está tentando alterar uma tabela que tenha uma referência de chave estrangeira.
mellowsoon

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

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


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`;

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


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;


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;

1

Renomeando uma coluna no MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

ALTER TABLE CHANGE;

Exemplo:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-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 ;


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.