2010-05-17 8 views
2

Comment identifier une clé primaire composite dans une table MySQL Database? ouComment identifier une clé primaire composite dans une table de base de données Mysql?

EDIT 2 ce que la requête SQL doit être utilisé pour afficher les indees d'une table qui contient les clés primaires composites?

J'ai beaucoup de tables dans la base de données MySQL qui sont d'avoir des clés composées de 2 ou 3 clés primaires, je me sers phpmyadmin, et je dois coder un script php pour identifier quelle table a les clés composites, maintenant i peut identifier la clé primaire des tables à l'aide d'une requête

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

qui me donne ce que je veux, mais maintenant comment puis-je trouver les indices où j'ai les clés composites?

EDIT 1

Dans le contexte du commentaire de l'image Daniel pour le regard des clés primaires composites phpmyadmin

clés primaires composites ressemblent à ceci dans phpmyadmin: alt text http://img208.imageshack.us/img208/7688/composite.jpg

+0

Que voulez-vous dire par identifier? Quels outils utilisez-vous? phpMyAdmin? SQLyog? Ou voulez-vous le faire par programme? Si oui, quelle langue? –

+0

@OM L'Eternité: RE l'image, n'est-ce pas suffisant pour identifier que votre clé est composite? (composé de 'moduleid' et' menuid') –

+0

Mon ami Daniel pls essayer de comprendre mon script php ne pas avoir les yeux pour identifier les touches composites ... :) pls me dire tout moyen de savoir que "cette table a touches composites primry .... "pls lire ma question correctement ... –

Répondre

4

MISE À JOUR:

Suite à la question mise à jour, vous pouvez utiliser les éléments suivants dans votre script PHP:

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

Cette requête renverra num_keys> 1 si la table tb a une clé primaire composite.


Je ne sais pas si je comprends ce que vous essayez d'atteindre, mais vous voudrez peut-être envisager d'utiliser SHOW INDEX comme suit:

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) 

S'il n'y avait pas une clé composite, vous le feriez seulement obtenir une ligne dans la requête 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

Daniel si vous êtes au courant de phpmyadmin gui il affiche les touches composées tous ensemble pour une seule ligne .. un après l'autre pas à pas .. –

+0

@OM: N'avez-vous pas quelque chose comme ça? http://img248.imageshack.us/img248/6843/showindex.png –

+0

Non Ce n'est pas comme ça, chk la question mise à jour j'ai collé l'image là-bas ... –

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' 

Merci Daniel et Pranav :)

Questions connexes