如何在Mysql数据库表中识别复合主键?或
编辑2应该使用什么sql查询来显示包含复合主键的表的索引?
我在mysql数据库中有许多表,它们的复合键为2或3个主键,我使用phpmyadmin,我必须编写php脚本来识别哪个表有复合键,现在我可以使用查询来识别表的主键。
SHOW INDEXES FROM `".$row3['TABLE_NAME']."` WHERE Key_name = 'PRIMARY'这给了我我想要的东西,但是现在我怎样才能找到我有复合键的索引呢?
编辑1
在Daniel上下文中的注释用于phpmyadmin中复合主键的外观
复合主键在phpmyadmin中如下所示:

发布于 2010-05-17 11:27:23
更新:
对于更新的问题,您可能希望在PHP脚本中使用以下内容:
SELECT COUNT(*) num_keys
FROM information_schema.KEY_COLUMN_USAGE
WHERE table_name ='tb' AND constraint_name = 'PRIMARY';如果表num_keys具有复合主键,则此查询将返回tb >1。
我不确定我是否理解您正在尝试实现的目标,但您可能需要考虑使用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)发布于 2010-05-17 12:37:25
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'谢谢Daniel和Pranav :)
https://stackoverflow.com/questions/2848528
复制相似问题