Błąd podczas zmiany nazwy kolumny w MySQL

434

Jak zmienić nazwę kolumny w tabeli xyz? Kolumny to:

Manufacurerid, name, status, AI, PK, int

Chcę zmienić nazwę na manufacturerid

Próbowałem użyć panelu PHPMyAdmin, ale pojawia się ten błąd:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)
Bharanikumar
źródło
5
Próbujesz zmienić tabelę z odniesieniem do klucza obcego.
mellowsoon
2
możliwy duplikat zmiany nazw kolumn klucza obcego w MySQL
OMG Ponies

Odpowiedzi:

747

Lone Ranger jest bardzo blisko ... w rzeczywistości musisz także określić typ danych kolumny o zmienionej nazwie. Na przykład:

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

Zapamiętaj :

  • Zamień INT na dowolny typ danych kolumny (WYMAGANE)
  • Tilde / Backtick (`) jest opcjonalny
Matt Diamond
źródło
12
Myślę, że kolumna zawiera klucz obcy, aby uzyskać błąd odpowiedzi, więc musisz upuścić klucz obcy, zmienić tabelę i dodać klucz obcy (lepiej najpierw wykonać kopię zapasową), a ty możesz to zmienić, zmieniając nazwę tylko klikając prawym przyciskiem myszy na stole - zmień stół
Chris Sim
7
Pamiętaj, że w tym rozwiązaniu tracisz wszystkie inne definicje kolumn, takie jak zerowalność, wartość domyślna itp. (Patrz: stackoverflow.com/questions/8553130/... ).
Dejan,
Zasadniczo zamiast MODIFY column <TYPE>(w celu przedefiniowania kolumny) jest to CHANGE column new_column <TYPE>?
mwfearnley
SHOW CREATE TABLE table_namemoże pomóc w ustaleniu aktualnej definicji kolumny
Mr. Deathless
@Dejan dzięki i to jest naprawdę denerwujące, po co wymagać typu, gdy nie można określić żadnych innych modyfikatorów? Wymagaj modyfikatorów typu + lub nie wymagaj go wcale.
JMac
43

Standardowa instrukcja zmiany nazwy MySQL to:

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

dla tego przykładu:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

Odwołanie: MYSQL 5.1 ALTER TABLE Składnia

dongpf
źródło
40

DLA MYSQL:

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

DLA ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;
mahbub_siddique
źródło
3
Nie działa, jeśli używasz "nazw kolumn MySQL. Zamiast tego używaj niczego lub `.
Alexis No
13

EDYTOWAĆ

Możesz zmienić nazwę pól używając:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

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

Samotny Strażnik
źródło
1
# 1064 - Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL, aby uzyskać prawidłową składnię do użycia w pobliżu '' w linii 1
Bharanikumar
17
Byłoby to przydatne, ale nie jest to zgodne z cytowaną dokumentacją: „Gdy używasz ZMIEŃ lub ZMIEŃ, definicja_kolumny musi zawierać typ danych i wszystkie atrybuty, które powinny mieć zastosowanie do nowej kolumny [...] Atrybuty obecne w oryginalnej definicji ale nieokreślone dla nowej definicji, nie są przenoszone dalej. ”
artfulrobot
musi to być „ZMIEŃ TABELĘ xyz CHANGE identyfikator typu produkcji producenta (długość)”
Chris Sim,
7

Wystąpił problem ze składnią, ponieważ właściwa jest składnia do zmiany polecenia ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;

Darszan
źródło
2

Z MySQL 5.x możesz używać:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;
MIKE KIM
źródło
1

Zmiana nazwy kolumny w MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;
Hasib Kamal
źródło
0

ZMIEŃ ZMIANĘ TABELI;

Przykład:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;
Vaquar Khan
źródło
-5

SKŁADNIA

zmień tabelę nazwa_tabeli zmień nazwę kolumny stara nazwa kolumny na nową nazwę kolumny ;

Przykład:

zmień nazwę biblioteki tabel zmień nazwę kolumny koszt na cenę ;

Abinaja
źródło
2
W mysql RENAME służy do zmiany nazwy tabeli, a nie kolumny, aby zmienić nazwę kolumny, użyj CHANGE.
jathin
Pytanie dotyczy MySQL - nie jest to poprawna składnia w MySQL.
tjbp 14.04.16
Jak zauważają inni, używaj poprawnej składni MySQL.
fool4jesus
Niepoprawna składnia mysql.
Hasib Kamal