2011-10-14 75 views
6

我有一個數據庫,我需要刪除一些外鍵,但我不知道外鍵是否仍然存在。查詢找到外鍵

我發現了一些存儲過程(http://forums.mysql.com/read.php?97,218825,247526),但我不想爲此創建存儲過程。

我試圖使用該存儲過程內的查詢,但我得到使用「是否存在(SELECT NULL FROM等。等一個錯誤......

我只能在存儲過程中使用IF EXISTS


現在,我可以運行的唯一的事情是

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

,我已經試過這太

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

但我得到一個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

我找實例論壇與簡單的查詢,我不能做,爲什麼這是行不通的感覺。

注:編輯更正斷開鏈接

+1

那麼你的查詢是什麼樣的? –

+0

你是什麼意思的「放下外鍵」? – gview

+0

@ gview有點像ALTER TABLE'table' DROP FOREIGN KEY'fk'; –

回答

5

您需要連接到信息方案,你可以找到所有關於此表中的主鍵和外鍵的信息

SELECT * FROM information_schema.TABLE_CONSTRAINTS T;

你需要是ROOT用戶才能訪問information_schema

使用此表您可以找到表,db以及是否有外鍵。

希望這有助於如果你不想使用IF EXIST和存儲過程。但我確定您可以使用IF EXIST可用於非存儲過程查詢....

+0

「[是]您需要成爲ROOT用戶才能訪問information_schema。」你從哪裏找到這些信息? – rstackhouse

+0

我認爲用戶只能查看他們有權訪問的部分信息模式更準確。如果用'GRANT ALL'創建用戶,那麼他們可以在該表上看到權限。 – rstackhouse

1

爲什麼不使用表「INFORMATION_SCHEMA」?

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

您需要連接到信息方案,你可以找到所有關於此表中的主鍵和外鍵的信息

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; 

HELP:看到這個鏈接list-foreign-keys-in-mysql