3

Mysqlデータベーステーブルで複合主キーを識別する方法は? また

EDIT 2 複合主キーを含むテーブルのインデックスを表示するには、どのSQLクエリを使用する必要がありますか?

2 つまたは 3 つの主キーの複合キーを持つ mysql データベースに多くのテーブルがあり、phpmyadmin を使用しています。複合キーを持つテーブルを識別するために php スクリプトをコーディングする必要があります。クエリを使用してテーブル

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

これは私が望むものを与えてくれますが、複合キーを持つインデックスを見つけるにはどうすればよいですか?

編集1

Daniel Image のコンテキストで、phpmyadmin の複合主キーの外観に関するコメント

phpmyadmin では、複合主キーは次のようになります。 代替テキスト

4

2 に答える 2

4

アップデート:

更新された質問に加えて、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クエリで 1 行しか取得できません。

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-17T11:27:23.667 に答える
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'

ダニエルとプラナフに感謝します:)

于 2010-05-17T12:37:25.330 に答える