2011-10-14 13 views
6

Mam bazę danych, w której muszę upuścić niektóre klucze obce, ale nie wiem wcześniej, czy klucze obce nadal istnieją.Zapytanie, aby znaleźć klucze obce

Znalazłem kilka procedur przechowywanych (http://forums.mysql.com/read.php?97,218825,247526), które załatwia sprawę, ale nie chcę utworzyć procedura składowana dla tego.

Próbowałem użyć zapytania wewnątrz procedury przechowywanej, ale pojawia się błąd przy użyciu „IF EXISTS (SELECT NULL FROM etc .. etc ...

mogę używać tylko IF EXISTS w procedury przechowywane?


teraz, jedyne co mogę uruchomić to

SELECT * FROM information_schema.TABLE_CONSTRAINTS 
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'myschema' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'mytable'; 

i próbowałem to też

IF EXISTS (SELECT NULL FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = parm_key_name) THEN 
(...) do something (...) 
END IF; 

ale dostaję You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF' at line 1

szukałem na forach przykłady prostych pytań i nie mogę zrozumieć, dlaczego to nie działa.

UWAGA: Edycja skorygować niedziałający link

+1

Jak wygląda zapytanie? –

+0

Co konkretnie masz na myśli mówiąc "upuść klucze obce"? – gview

+0

@ gview coś takiego jak ALTER TABLE 'table' DROP ZAGRANICZNY KLUCZ' fk'; –

Odpowiedz

5

trzeba podłączyć do systemu informacyjnego i można znaleźć wszystkie informacje na temat klucza podstawowego i kluczy obcych w tej tabeli

SELECT * FROM information_schema.TABLE_CONSTRAINTS T;

ci musi być użytkownikiem ROOT, aby uzyskać dostęp do information_schema.

KORZYSTAJĄC Z tej tabeli można znaleźć tabelę, db i czy ma on klucz obcy.

Mam nadzieję, że to pomoże, jeśli nie chcesz używać IF EXIST i procedury składowanej. Ale jestem pewien, że można użyć IF EXIST może być używany do zapytań niezapisanych procedur ....

+0

"[Y] musisz być użytkownikiem ROOT, aby uzyskać dostęp do informacji_schematu." Gdzie znalazłeś tę informację? – rstackhouse

+0

Myślę, że dokładniej jest powiedzieć, że użytkownik może wyświetlać tylko część schematu informacji, do którego mają uprawnienia. Jeśli użytkownik zostanie utworzony z opcją "GRANT ALL", wówczas może zobaczyć uprawnienia do tej tabeli. – rstackhouse

1

Dlaczego nie używasz do tego tabeli "INFORMATION_SCHEMA"?

SELECT * 
FROM `TABLE_CONSTRAINTS` 
WHERE `CONSTRAINT_TYPE` = 'FOREIGN KEY' 
0

trzeba podłączyć do systemu informacyjnego i można znaleźć wszystkie informacje na temat klucza podstawowego i kluczy obcych w tej tabeli

select 
     concat(table_name, '.', column_name) as 'foreign key', 
     concat(referenced_table_name, '.', referenced_column_name) as 'references' 
    from 
     information_schema.key_column_usage 
    where 
     referenced_table_name is not null; 

POMOC: patrz link list-foreign-keys-in-mysql

Powiązane problemy