Errore durante la ridenominazione di una colonna in MySQL


434

Come rinominare una colonna nella tabella xyz? Le colonne sono:

Manufacurerid, name, status, AI, PK, int

Voglio rinominare manufacturerid

Ho provato a utilizzare il pannello PHPMyAdmin, ma viene visualizzato questo errore:

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

5
Stai provando a cambiare una tabella che contiene un riferimento di chiave esterna.
Mellowsoon,

Risposte:


747

Lone Ranger è molto vicino ... in effetti, devi anche specificare il tipo di dati della colonna rinominata. Per esempio:

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

Ricorda :

  • Sostituisci INT con qualunque sia il tuo tipo di dati di colonna (RICHIESTO)
  • Tilde / Backtick (`) è facoltativo

12
Penso che la colonna contenga una chiave esterna per ottenere l'errore della risposta, quindi devi rilasciare la chiave esterna, modificare la tabella e aggiungere la chiave esterna (è meglio eseguire prima il backup) e puoi modificarla cambiando solo il nome con il clic destro sul tavolo - alter table
Chris Sim,

7
Tieni presente che in questa soluzione perdi tutte le altre definizioni di colonna come nullability, valore predefinito, ecc. (Vedi: stackoverflow.com/questions/8553130/… ).
Dejan,

Quindi, in sostanza, invece di MODIFY column <TYPE>(per ridefinire una colonna), è CHANGE column new_column <TYPE>?
mwfearnley,

SHOW CREATE TABLE table_namepuò aiutarti a capire l'attuale definizione di colonna
Mr. Deathless

@Dejan grazie e questo è davvero fastidioso, perché richiedere un tipo quando non è possibile specificare altri modificatori? O richiedono un tipo + modificatori o non lo richiedono affatto.
JMac,

43

L'istruzione standard di rinomina Mysql è:

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

per questo esempio:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Riferimento: MYSQL 5.1 ALTER TABLE Sintassi


40

PER MYSQL:

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

PER ORACLE:

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

3
Non funziona se si utilizza "per i nomi di colonna per MySQL. Usa niente o `invece.
Alexis n.

13

MODIFICARE

Puoi rinominare i campi usando:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

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


1
# 1064 - Hai un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino '' alla riga 1
Bharanikumar,

17
Questo sarebbe utile, ma non è vero per la documentazione che hai citato: "Quando usi CHANGE o MODIFY, column_definition deve includere il tipo di dati e tutti gli attributi che dovrebbero essere applicati alla nuova colonna [...] Attributi presenti nella definizione originale ma non specificato per la nuova definizione non vengono portati avanti. "
artfulrobot

deve essere "ALTER TABLE xyz CHANGE manufacurerid Manufacturerid tipo di dati (lunghezza)"
Chris Sim

7

C'è un problema di sintassi, perché è la sintassi giusta per modificare il comando ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;


2

Con MySQL 5.x puoi usare:

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

1

Rinominare una colonna in MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

MODIFICA TABELLA ALTER;

Esempio:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

SINTASSI

alter table table_name rinomina il nome della colonna vecchia con il nome della nuova colonna ;

Esempio:

alter table library rinomina la colonna cost in price ;


2
In mysql RENAME viene utilizzato per rinominare una tabella e non una colonna, per rinominare una colonna utilizzare CHANGE.
jathin,

La domanda è per MySQL: questa non è una sintassi valida in MySQL.
tjbp,

Come altri notano, si prega di utilizzare una sintassi MySQL valida.
fool4jesus

Sintassi mysql non valida.
Hasib Kamal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.