Mysql

在 Mysql 數據庫中查找所有具有(外鍵和主鍵)約束的欄位的最佳方法是什麼?

  • November 8, 2015

我有一個有 250 個表的 mysql 數據庫。我想執行一個查詢來檢索: tableName ; 欄位名;ConstaintName(主鍵或外鍵)。

我可以使用 information_schema.TABLE_CONSTRAINTS 來檢索約束類型,但對於內部連接,我不知道應該使用什麼。

完成這項任務的最佳方法是什麼?

編輯:不是約束名稱。應該是 CONSTRAINT_TYPE 而不是 ConstaintName。所以我們應該只能看到(主鍵或外鍵)。

您可以使用INFORMATION_SCHEMA KEY_COLUMN_USAGE表。

SELECT
table_name AS TableName,
column_name AS ColumnName,
Constraint_name as ConstraintName
FROM
information_schema.key_column_usage
WHERE table_schema = 'database_name'

根據 OP 的要求更新了程式碼:

SELECT DISTINCT(TC.table_name) AS TableName, KC.column_name as ColumnName,
TC. CONSTRAINT_TYPE AS ConstraintType
FROM 
information_schema.table_constraints TC,  
information_schema.key_column_usage KC  
WHERE
TC.CONSTRAINT_TYPE IN ('FOREIGN KEY', 'PRIMARY KEY') 
and KC.table_name = TC.table_name and KC.TABLE_SCHEMA = TC.TABLE_SCHEMA
and KC.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
and KC.table_schema = DATABASE();

引用自:https://dba.stackexchange.com/questions/120412