首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mysql数据库表中识别复合主键?

如何在Mysql数据库表中识别复合主键?
EN

Stack Overflow用户
提问于 2010-05-17 11:19:03
回答 2查看 7.5K关注 0票数 3

如何在Mysql数据库表中识别复合主键?或

编辑2应该使用什么sql查询来显示包含复合主键的表的索引?

我在mysql数据库中有许多表,它们的复合键为2或3个主键,我使用phpmyadmin,我必须编写php脚本来识别哪个表有复合键,现在我可以使用查询来识别表的主键。

代码语言:javascript
复制
SHOW INDEXES FROM `".$row3['TABLE_NAME']."` WHERE Key_name = 'PRIMARY'

这给了我我想要的东西,但是现在我怎样才能找到我有复合键的索引呢?

编辑1

在Daniel上下文中的注释用于phpmyadmin中复合主键的外观

复合主键在phpmyadmin中如下所示:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-17 11:27:23

更新:

对于更新的问题,您可能希望在PHP脚本中使用以下内容:

代码语言:javascript
复制
SELECT COUNT(*) num_keys 
FROM   information_schema.KEY_COLUMN_USAGE     
WHERE  table_name ='tb' AND constraint_name = 'PRIMARY';

如果表num_keys具有复合主键,则此查询将返回tb >1。

我不确定我是否理解您正在尝试实现的目标,但您可能需要考虑使用SHOW INDEX,如下所示:

代码语言:javascript
复制
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查询中得到一行:

代码语言:javascript
复制
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)
票数 4
EN

Stack Overflow用户

发布于 2010-05-17 12:37:25

代码语言:javascript
复制
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 :)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2848528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档