次の SQL コードは、2 つのテーブル (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}
と{a,b}
、それぞれ - B:
{a}
と{a}
、それぞれ。
これは、MySQL では、一意のキーの概念は候補キー/スーパーk1
キーの概念のいずれにも対応しないという結論を示唆していk2
ます。 )。ケース (B) の場合、andはスーパーキーにはなりません。これは、同一の属性セットを持つ異なるキーであるためです。{a} ⊂ {a,b}
k2
k1
k2
私の質問: この結論は正しいですか? もしそうなら、どの信頼できる情報源がそれを明確に述べていますか?