2010-05-17 47 views
2

如何識別任何Mysql數據庫表中的組合主鍵? 或如何識別任何Mysql數據庫表中的複合主鍵?

EDIT 2 哪些SQL查詢應該被用來 顯示誰 包含複合主鍵的任何表的indees?

我具有其中具有2個或3主鍵的組合鍵MySQL數據庫許多表中,我使用的phpmyadmin,我已經編寫一個PHP腳本來識別哪個表具有複合鍵,現在我可以通過查詢

SHOW INDEXES FROM `".$row3['TABLE_NAME']."` WHERE Key_name = 'PRIMARY' 

這是給我我想要的識別表的主鍵,但是現在我如何能找出我有複合主鍵索引?

EDIT 1

在丹尼爾影像註釋 的用於 phpmyadmin的複合主鍵的外觀的上下文

複合主鍵看起來像這樣在phpMyAdmin: alt text http://img208.imageshack.us/img208/7688/composite.jpg

+0

你是什麼意思識別?你使用什麼工具? phpMyAdmin的? SQLyog的?或者你想以編程的方式做到這一點?如果是這樣,什麼語言? – 2010-05-17 11:26:16

+0

@OM永恆:重新形象,是不是足夠確定你的鑰匙是複合? (由'moduleid'和'menuid'組成) – 2010-05-17 11:56:02

+0

我的朋友Daniel請嘗試理解我的PHP腳本沒有眼睛來識別組合鍵...... :)請告訴我什麼方法來找出「這張桌子有複合材料鑰匙....「請正確閱讀我的問題... – 2010-05-17 11:58:19

回答

4

更新:

而且更新後的問題,你可能需要使用你的PHP腳本如下:

SELECT COUNT(*) num_keys 
FROM information_schema.KEY_COLUMN_USAGE  
WHERE table_name ='tb' AND constraint_name = 'PRIMARY'; 

這個查詢將返回num_keys> 1,如果表tb有一個複合主鍵。


我不知道如果我明白你想實現什麼,但你可能要考慮使用SHOW INDEX如下:

CREATE TABLE tb (a int, b int, c int); 
Query OK, 0 rows affected (0.21 sec) 

ALTER TABLE tb ADD CONSTRAINT pk_tb PRIMARY KEY (a, b); 
Query OK, 0 rows affected (0.06 sec) 

SHOW INDEX FROM tb WHERE key_name='PRIMARY'; 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| tb |   0 | PRIMARY |   1 | a   | A   |  NULL |  NULL | NULL |  | BTREE  |   | 
| tb |   0 | PRIMARY |   2 | b   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
2 rows in set (0.02 sec) 

如果不是一個複合鍵,你會只有在SHOW INDEX查詢獲取一行:

CREATE TABLE tb2 (a int, b int, c int); 
Query OK, 0 rows affected (0.05 sec) 

ALTER TABLE tb2 ADD CONSTRAINT pk_tb PRIMARY KEY (a); 
Query OK, 0 rows affected (0.05 sec) 

SHOW INDEX FROM tb2 WHERE key_name='PRIMARY'; 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| tb2 |   0 | PRIMARY |   1 | a   | A   |   0 |  NULL | NULL |  | BTREE  |   | 
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
1 row in set (0.02 sec) 
+0

丹尼爾如果你知道phpmyadmin gui它顯示覆合鍵所有在一個單一的行..一個在其他步後.. .. – 2010-05-17 11:32:18

+0

@OM:你不喜歡這樣的事嗎? http://img248.imageshack.us/img248/6843/showindex.png – 2010-05-17 11:37:59

+0

不是這樣,chk更新問題,我粘貼了那裏的圖片... – 2010-05-17 11:50:25

1
SELECT COUNT(* ) num_keys 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE table_name = 'jos_modules_menu' 
AND constraint_name = 'PRIMARY' 
AND table_schema = 'pranav_test' 

感謝丹尼爾和Pranav :)