2011-09-18 43 views
1

假設「table_users」上的「user_id」字段是10個其他表中的10個外鍵的主鍵。我想重命名「table_users」上的主鍵字段,但它不允許我重命名它,因爲有10個其他表中的10個外鍵被鏈接到它。我可以知道如何知道10個表中哪些具有外鍵?什麼是SQL代碼來顯示有外鍵的10個表?sql列出了主鍵的所有外鍵

我正在使用phpMyAdmin和InnoDB引擎。我知道SHOW ENGINE INNODB STATUS可以做的工作,但它告訴我1個表中的每個時間,意味着我需要重複命名主鍵字段爲10倍和運行SHOW ENGINE INNODB STATUS 10次,找出所有的10桌。有沒有其他更好的解決方案來找出10個表格?

回答

2

你可以試着查詢INFORMATION_SCHEMA數據庫:

select ku.* 
from INFORMATION_SCHEMA.table_constraints tc 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku ON 
(tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME and tc.CONSTRAINT_SCHEMA = 
ku.CONSTRAINT_SCHEMA) 
where constraint_type='FOREIGN KEY' and ku.REFERENCED_TABLE_NAME =  
'your_table_name' 
+0

omg!有用!非常感謝你。 – zac1987

0

隨着MySQL的root用戶,可以使用

SET foreign_key_checks = 0; 

這將禁用約束系統,將讓你改變你的表定義解決此問題得到。當然,從那裏你所有的外鍵約束將被打破,並需要被刪除和重新創建。

SET foreign_key_checks = 1; 

將重新打開約束系統。

MySQL還具有可查詢的數據字典。這在This previous question完全覆蓋,所以我不打算重複任何信息。

+0

我已經試過你的建議。我點擊數據庫名稱> Table_Users> SQL>'SET FOREIGN_KEY_CHECKS = 0;'。然後我重命名Table_Users上的主字段(user_id)。它仍然沒有讓我重新命名它。爲什麼?鏈接ü顯示我返回錯誤「您鍵入的URL不再存在。」 – zac1987