MySQL MetaData中PRI_KEY,PART_KEY,MULTIPLE_KEY,UNIQUE_KEY的内涵

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。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值