Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SHOW INDEX MULTIPLE UNIQUE
Forum PHP.pl > Forum > Bazy danych > MySQL
phoenix84
sprawa troche zawila...

mam CMS ktory koordynuje kilka serwerow...

no i mam tam autoaktualizacje... dzialalo to tak, ze serwer sobie sprawdzal czy struktury kolumn sa identyczne, jak nie to je odpowiednio przebudowywal zachowujac dane
wszystko dzialalo cacy, az nie dodalem klucza UNIQUE na wiecej niz jedna kolumne... wtedy SHOW COLUMNS zwraca MUL, a nie UNI i niestety nie informuje, na ktore kolumny ten unique jeszcze jest nalozony... oczywiscie jest 1 unique na kilku kolumnach... oczywiscie chcialbym rozwiazac problem przyszlosciowo, czyli napisac rozwiazanie dzialajace rowniez jak bedzie wiecej niz 1 multiple unique w tabeli...

jakies pomysly? w google rozwiazania polowiczne... nigdzie nie znalazlem niczego sensownego... cos show index where podpowiada, ale nadal nie pokazuje, ktore kolumny z ktorymi sa w unique...

Na pewno jest to mozliwe, bo w PhpMyAdmin wszystkie klucze sa listowane poprawnie, jednak nie jest wyswietlana komenda, jak to uzyskac...

pozdrawiam,

k.
Mchl
Rzuć okiem na tabelę[1] `information_schema`.`KEY_COLUMN_USAGE`

[1] Widok tak naprawdę
phoenix84
sorki, ale nie kumam tego co napisales... do czego to przyczepic? smile.gif

ale znalazlem inny punkt zaczepienia

show index tabela zwraca tabele, ktora ma kolumne "Seq_in_index" i to jest chyba to czego szukam, bo kazdy index ma swoja nazwe... i wsrod tej nazwy ma znaczenie ta sekwencja... i jak to obrobie to powinno dzialac... jednak z ciekawosci, chce wiedziec jaka byla Twoja idea... moze jakis latwiejjszy pomysl smile.gif

EDIT:

juz zakumalem... dla takich nie kumatych jak ja... information schema to dodatkowa baza danych dobudowana do kazdej bazy w mysql... smile.gif oczywsicie masz racje... obie opcje dzialaja podobnie... jednak w mojej nie trzeba zmieniac bazy na ktorej sie pracuje... czasem to ma znaczenie...

pozdro,

k.
Mchl
Takie zapytanie

Kod
SELECT CONSTRAINT_NAME, GROUP_CONCAT(COLUMN_NAME) AS COLUMN_NAME FROM `information_schema`.`KEY_COLUMN_USAGE`
WHERE CONSTRAINT_SCHEMA = 'twojaBaza' AND TABLE_NAME = 'twojaTabela' GROUP BY CONSTRAINT_NAME


Da Ci listę kluczy w danej tabeli wraz z kolumnami wchodzącymi w ich skład.


[edit]

W mojej też nie trzeba zmieniać bazy. Po co mamy kropkę? tongue.gif
phoenix84
Oczywiscie dziala fantastycznie!

pozdro,

k.

oczywiscie ide dalej... by uzyskac do tego typ klucza... zmodyfikowalem, jak nizej... ale w wersji PRIMARY dostaje "id,id,id,id..." oczywiscie to nie to co chcialem uzyskac, choc UNIQUE dzialaja bez problemu...

  1. SELECT CONSTRAINT_NAME, GROUP_CONCAT( COLUMN_NAME ) AS COLUMN_NAME, CONSTRAINT_TYPE
  2. FROM `information_schema`.`KEY_COLUMN_USAGE`
  3. INNER JOIN `information_schema`.`TABLE_CONSTRAINTS` USING (CONSTRAINT_NAME) WHERE `information_schema`.`KEY_COLUMN_USAGE`.`CONSTRAINT_SCHEMA` = 'pisil_1'
  4. AND `information_schema`.`KEY_COLUMN_USAGE`.`TABLE_NAME` = 'cms_fbn_subskrybenci'
  5. GROUP BY CONSTRAINT_NAME


moze jakis pomysl,

k.
Mchl
Kod
GROUP_CONCAT(DISTINCT COLUMN_NAME )
phoenix84
no i smiga!

dzieki!
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.