Как определить составной первичный ключ в любой таблице базы данных Mysql? - PullRequest
2 голосов
/ 17 мая 2010

Как определить составной первичный ключ в любой таблице базы данных Mysql? или

РЕДАКТИРОВАТЬ 2 какой SQL-запрос должен использоваться отобразить индексы любой таблицы, которая содержит составные первичные ключи?

У меня есть много таблиц в базе данных mysql, в которых есть составные ключи из 2 или 3 первичных ключей, я использую phpmyadmin, и мне нужно написать скрипт php, чтобы определить, какая таблица имеет составные ключи, сейчас я могу определить первичный ключ таблиц с помощью запроса

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

, который дает мне то, что я хочу, но теперь, как я могу узнать индексы, где у меня есть составные ключи?

РЕДАКТИРОВАТЬ 1

В контексте комментария Даниэля для просмотра составных первичных ключей в PHPMyAdmin

составные первичные ключи выглядят так в phpmyadmin: альтернативный текст http://img208.imageshack.us/img208/7688/composite.jpg

Ответы [ 2 ]

4 голосов
/ 17 мая 2010

UPDATE:

В дополнение к обновленному вопросу вы можете использовать следующее в вашем 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)
1 голос
/ 17 мая 2010
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'

Спасибо, Даниил и Пранав:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...