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)

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

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


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

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


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;


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;

1

Zmiana nazwy kolumny w MySQL:

ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

ZMIEŃ ZMIANĘ TABELI;

Przykład:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.