Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySql] zmiana kolejnosci kulumn
Forum PHP.pl > Forum > Bazy danych > MySQL
maly_swd
Witam.
Mam pytanie odnosnie zmiany kolejnosci kolumn w bazie.
powiedzmy tabela dane ma taka strukture:

id (int)
name (varchar)
desc (varchar)
id_kat (int)
... (int)
id_sub (int)

i teraz chce uzyskac taka, bez straty danych:
id (int)
id_kat (int)
... (int)
id_sub (int)
name (varchar)
desc (varchar)
Mchl
A co za różnica jaka jest kolejność? I tak w zapytaniach możesz podawać kolumny dowolnie.

Cztery zapytania
ALTER TABLE Utwórz sobie name1 i desc1 na końcu tabeli.
UPDATE Skopiuj zawartość z name do name1, z desc do desc1
ALTER TABLE skasuj kolumny name i desc
ALTER TABLE zmień nazwę name1 na name i desc1 na desc

Trzecie i czwarte pewnie da się zrobić razem, ale ja wolę osobno winksmiley.jpg
maly_swd
oj jest roznica:)
gdzies bylo o tym pisane, ze pola varchar powinny byc na koncu. (jak dobrze pamietam) Mysql majac taki zapis
pole varchar
pole2 char

traktuje drugie pole w sposob varchar (czy jakos tak), chodzi o to ze dane nie znajduja sie na takim sammym oddaleniu co w poprzednim wierszu. Czyli za kazdym przeszukaniem wiersza musi wyliczac przesuniecie danych aby dobrac sie do tych co sa za kolumna varchar

a co do Twojego rozwiazania to jest inne szybsze
utworzyc sobie tabele i insert into tabnew select * from tabold - ale mi nie o takie rozwiazanie chodzi:)

myslalem ze istnieje takie cos jak przestawienie kolumn
tvister
Dobrze mówisz.

Poleceniem alter możesz takie rzeczy zrobić .
Ale jak dobrze pamiętam to zapytanie ma pokaźną długość.

  1. ALTER TABLE `dupa_db`.`tabela` CHANGE `id` `id` int(11) NOT NULL AUTO_INCREMENT comment '' first, CHANGE `id_kat` `id_kat` int(11) NULL comment '' after `id`, CHANGE `dane` `dane` char(1) NULL collate utf8_general_ci comment '' after `id_kat`, CHANGE `id_sub` `id_sub` int(11) NULL comment '' after `dane`, CHANGE `name` `name` char(1) NULL collate utf8_general_ci comment '' after `id_sub`, CHANGE `desc` `desc` int(11) NULL comment '' after `name`;
Mchl
Jak znajdziesz tę informację to rzuć linkiem, chętnie poczytam.
MySQL ładując dane do RAM zamienia VARCHAR na CHAR o długości odpowiadającej najdłuższej zawartości w tej kolumnie, tak więc w pamięci wszystkie wiersze są sobie równe - tak przynajmniej ja gdzieś czytałem tongue.gif

[edit]
A można jeszcze inaczej:
http://dev.mysql.com/doc/refman/5.0/en/cha...lumn-order.html (w komentarzach)
artega
Cytat
myslalem ze istnieje takie cos jak przestawienie kolumn

Pytanie i odpowiedź już było tutaj. Trzeba tylko "dobrze" szukać ;)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.