Czy mogę zapytać dlaczego? Kolejność kolumn to właściwie tylko problem estetyczny ...
deceze
6
@deceze może nie - określa kolejność wartości w SELECT *instrukcji. (Oczywiście, jeśli kolejność wartości jest ważna, należy je wyraźnie wymienić w oświadczeniu, ale być może OP nie ma tutaj całkowitej kontroli).
Ted Hopp
1
Wiem, że to nic nie wpływa. Moja oryginalna tabela ma wiele kolumn, więc właśnie dodałem 3 kolumny, które zostały dodane w ostatniej. Ale chcę, aby wyświetlały się w pozycjach 3-4-5, aby ułatwić korzystanie z SELECTinstrukcji
sum
6
@iSumitG: Należy również pamiętać, że AFTER columnmożna go również używać z ALTER TABLE ADD column. (następnym razem dodasz kilka pól.)
ypercubeᵀᴹ
2
Podczas ładowania zrzutu mysql używa wstawiania do wartości. Więc jeśli na przykład ładujesz dane z prod do dev, a kolumny nie są uporządkowane, pojawi się błąd. Dlatego warto to zrobić.
Hooray Im Helping
Odpowiedzi:
345
Jeśli empName jest kolumną VARCHAR (50):
ALTERTABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;
EDYTOWAĆ
W komentarzach możesz również to zrobić:
ALTERTABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;
Pamiętaj, że powtórzenie empNamejest celowe. Musisz powiedzieć MySQL, że chcesz zachować tę samą nazwę kolumny.
Należy pamiętać, że obie wersje składni są specyficzne dla MySQL. Nie będą działać na przykład w PostgreSQL lub wielu innych DBMS.
Kolejna edycja: jak wskazał @Luis Rossi w komentarzu, musisz całkowicie określić zmienioną definicję kolumny tuż przed AFTERmodyfikatorem. Powyższe przykłady po prostu mają VARCHAR(50), ale jeśli potrzebujesz innych cech (takich jak NOT NULLlub wartość domyślna), musisz je również uwzględnić. Więcej informacji można znaleźć w dokumentacjiALTER TABLE .
Tylko uwaga: MODIFY nie jest obsługiwany do wersji 4.
Erre Efe,
4
Musisz powtórzyć nazwę kolumny, ponieważ składnia zakłada, że możesz chcieć zmienić nazwę kolumny. Np .: ZMIEŃ TABELĘ Pracownicy ZMIEŃ KOLUMNĘ empName empName varchar (50) PO dziale;
brianjcohen
Należy pamiętać, że zmiana kolejności nie zostanie odzwierciedlona w zrzutach SQL bazy danych.
skalee
3
@SalehEnamShohag - Tak, zgodnie z docs The COLUMNHasło jest opcjonalne w ALTER TABLEsprawozdaniu. Wolę go używać, ponieważ uważam, że dzięki temu stwierdzenie jest bardziej czytelne.
Ted Hopp
1
Działa dla mnie dobrze, w moim przypadku musiałem zdefiniować, że kolumna była NOT NULL DEFAULT 1, dzieje się to zaraz po typie kolumny w przykładzieVARCHAR(50)
Luiz Rossi
67
Zmień pozycję kolumny:
ALTERTABLE Employees
CHANGE empName empName VARCHAR(50)NOTNULL AFTER department;
Jeśli chcesz przenieść go na pierwszą pozycję, musisz użyć terminu PIERWSZY na końcu zapytania ALTER TAN CHANGE [COLUMN]:
Bardzo przydatne było wspomnienie, jak przenieść go na pierwszą pozycję
Tristian
2
Masz pojęcie, jak to by się działało na dużym stole? Czy to tylko zmiana niektórych metadanych, czy faktycznie musi reorganizować dane na dysku?
Kip
6
nieważne, odpowiedziałem na moje pytanie, wypróbowując je na stole, który miałem z 3,9 mln rzędów, zajęło to około 2 minut. więc zdecydowanie robi coś więcej niż tylko zamienia niektóre metadane.
Kip
14
phpMyAdmin zapewnia do tego GUI w widoku struktury tabeli. Zaznacz, aby wybrać kolumnę, którą chcesz przenieść, i kliknij akcję zmiany na dole listy kolumn. Następnie możesz zmienić wszystkie właściwości kolumny, a po prawej stronie ekranu znajdziesz funkcję „przenieś kolumnę”.
Oczywiście to wszystko tylko buduje zapytania w doskonale dobrej, górnej odpowiedzi, ale fani GUI mogą docenić alternatywę.
Pytanie dotyczy konkretnie „W jaki sposób można tego dokonać za pomocą instrukcji ALTER”. Nie wszyscy korzystający z MySQL używają phpMyAdmin.
Caleb
3
Wiele się obecnie dowiaduję z wiersza poleceń, obserwując dane wyjściowe zapytania z narzędzi GUI, takich jak phpMyAdmin. Cieszę się, że ten post otrzymał tyle ocen negatywnych, ile ppl uważa za stosowne na tej podstawie: 1 osoba to zobaczy, wykona pracę w środowisku, w którym czuje się dobrze, trochę się uczy i ruszy dalej.
dla tej akcji phpmyadmi nie pokazuje polecenia wykonującego akcję. Nie znaleziono
Tebe
2
Wow, tyle gniewu na alternatywne rozwiązanie, które rozwiązuje problem i uzupełnia odpowiedzi, o które OP poprosił o ALTER SQL.
Ewen
1
Musiałem uruchomić to dla kolumny wprowadzonej w późniejszych etapach produktu, na ponad 10 stołach. Napisałem więc ten szybki nieporządny skrypt, aby wygenerować polecenie alter dla wszystkich „odpowiednich” tabel.
SET@NeighboringColumn ='<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"`
`",COLUMN_NAME,"` ", c.DATA_TYPE,CASEWHEN c.CHARACTER_MAXIMUM_LENGTH ISNOTNULLTHEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH,")")ELSE""END," AFTER
`",@NeighboringColumn,"`;")FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA ='<YOUR SCHEMA NAME>'AND c.COLUMN_NAME ='<COLUMN TO MOVE>'AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE ='BASE TABLE'AND@NeighboringColumn IN(SELECT COLUMN_NAME
FROM information_schema.COLUMNS c2
WHERE c2.TABLE_NAME = t.TABLE_NAME);
SELECT *
instrukcji. (Oczywiście, jeśli kolejność wartości jest ważna, należy je wyraźnie wymienić w oświadczeniu, ale być może OP nie ma tutaj całkowitej kontroli).SELECT
instrukcjiAFTER column
można go również używać zALTER TABLE ADD column
. (następnym razem dodasz kilka pól.)Odpowiedzi:
Jeśli empName jest kolumną VARCHAR (50):
EDYTOWAĆ
W komentarzach możesz również to zrobić:
Pamiętaj, że powtórzenie
empName
jest celowe. Musisz powiedzieć MySQL, że chcesz zachować tę samą nazwę kolumny.Należy pamiętać, że obie wersje składni są specyficzne dla MySQL. Nie będą działać na przykład w PostgreSQL lub wielu innych DBMS.
Kolejna edycja: jak wskazał @Luis Rossi w komentarzu, musisz całkowicie określić zmienioną definicję kolumny tuż przed
AFTER
modyfikatorem. Powyższe przykłady po prostu mająVARCHAR(50)
, ale jeśli potrzebujesz innych cech (takich jakNOT NULL
lub wartość domyślna), musisz je również uwzględnić. Więcej informacji można znaleźć w dokumentacjiALTER TABLE
.źródło
COLUMN
Hasło jest opcjonalne wALTER TABLE
sprawozdaniu. Wolę go używać, ponieważ uważam, że dzięki temu stwierdzenie jest bardziej czytelne.NOT NULL DEFAULT 1
, dzieje się to zaraz po typie kolumny w przykładzieVARCHAR(50)
Zmień pozycję kolumny:
Jeśli chcesz przenieść go na pierwszą pozycję, musisz użyć terminu PIERWSZY na końcu zapytania ALTER TAN CHANGE [COLUMN]:
źródło
phpMyAdmin zapewnia do tego GUI w widoku struktury tabeli. Zaznacz, aby wybrać kolumnę, którą chcesz przenieść, i kliknij akcję zmiany na dole listy kolumn. Następnie możesz zmienić wszystkie właściwości kolumny, a po prawej stronie ekranu znajdziesz funkcję „przenieś kolumnę”.
Oczywiście to wszystko tylko buduje zapytania w doskonale dobrej, górnej odpowiedzi, ale fani GUI mogą docenić alternatywę.
moja wersja phpMyAdmin to 4.1.7
źródło
Musiałem uruchomić to dla kolumny wprowadzonej w późniejszych etapach produktu, na ponad 10 stołach. Napisałem więc ten szybki nieporządny skrypt, aby wygenerować polecenie alter dla wszystkich „odpowiednich” tabel.
źródło