CREATE TABLE pk0 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1));
c1:      NOT_NULL PRI_KEY NUM PART_KEY



CREATE TABLE pk1 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1),
KEY idx2 (c2));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      MULTIPLE_KEY NUM PART_KEY



CREATE TABLE pk2 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1, c2),
KEY idx2 (c2));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      NOT_NULL PRI_KEY MULTIPLE_KEY NUM PART_KEY



CREATE TABLE pk3 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1),
KEY idx2 (c1, c2));
c1:      NOT_NULL PRI_KEY MULTIPLE_KEY NUM PART_KEY
c2:      NUM PART_KEY



CREATE TABLE pk4 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1),
KEY idx2 (c2, c1));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      MULTIPLE_KEY NUM PART_KEY



CREATE TABLE pk5 (c1 int,
PRIMARY KEY(c1));
c1:      NOT_NULL PRI_KEY NUM PART_KEY



CREATE TABLE pk6 (c1 int, c2 int,
PRIMARY KEY(c1),
UNIQUE KEY(c2));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      UNIQUE_KEY NUM PART_KEY



CREATE TABLE pk7 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1),
KEY idx2 (c2, c3, c4));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      MULTIPLE_KEY NUM PART_KEY
c3:      NUM PART_KEY
c4:      NUM PART_KEY
c5:      NUM

CREATE TABLE pk8 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1),
UNIQUE (c3, c4));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      NUM
c3:      MULTIPLE_KEY NUM PART_KEY
c4:      NUM PART_KEY
c5:      NUM

CREATE TABLE pk8 (c1 int, c2 int, c3 int, c4 int, c5 int, 
PRIMARY KEY(c1),
UNIQUE (c3));
c1:      NOT_NULL PRI_KEY NUM PART_KEY
c2:      NUM
c3:      UNIQUE_KEY NUM PART_KEY
c4:      NUM
c5:      NUM

PART_KEY,是主键/索引的一部分,就有PART_KEY;是主键的一部分,就有PRI_KEY; MULTIPLE_KEY表示KEY的选择性不唯一(非唯一索引)。下面的解释来自MySQL源码:

- PRI_KEY_FLAG
  Returns the primary key.

- UNIQUE_KEY_FLAG
  Returns a unique key (flagged with HA_NOSAME)

- MULTIPLE_KEY_FLAG
  Returns a key that is not unique (flagged with HA_NOSAME
  and without HA_NULL_PART_KEY) nor PK.

根据这个解释,上面各个表的输出都比较合理了。但pk3这张表的表现比较奇特,我认为是MySQL的一个Bug:c1本来是主键,是唯一索引,不应该有MULTIPLE_KEY Flag,但由于它出现在了KEY idx2 (c1, c2)中,就戴上了非唯一索引的帽子,给它强安了一个MULTIPLE_KEY。