下面的 SQL 代码创建两个表, (A) __tableA__
, (B) __tableB__
。两个表都包含 2 个唯一键,分别命名为k1
和k2
。
SHOW VARIABLES WHERE Variable_name = 'version'; # 5.0.51b
CREATE TABLE __tableA__ (`a` INT, `b` INT,
UNIQUE KEY `k1`(`a`),
UNIQUE KEY `k2`(`a`,`b`)
); # Key_name Column_name
# -------------------------
SHOW KEYS FROM __tableA__; # k1 a
# k2 a
# k2 b
CREATE TABLE __tableB__ (`a` INT,
UNIQUE KEY `k1`(`a`),
UNIQUE KEY `k2`(`a`)
); # Key_name Column_name
# -------------------------
SHOW KEYS FROM __tableB__; # k1 a
# k2 a
DROP TABLE __tableA__; # cleanup
DROP TABLE __tableB__; #
如命令所示,键的SHOW KEYS
属性(列)集k1
和k2
- 答:
{a}
和{a,b}
,分别, - B:
{a}
和{a}
,分别。
这表明,在 MySQL 中,唯一键的概念不对应于候选键/超级键的任何一个概念:在情况 (A) 中, k1
并且k2
不能是候选键,因为{a} ⊂ {a,b}
(因此属性集k2
不是最小的)。在情况(B)中,k1
并且k2
不能是超级键,因为它们是具有相同属性集的不同键。
我的问题:这个结论正确吗?如果是这样,哪个权威来源明确说明了这一点?