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.