主键的UNIQUE KEY约束意味着什么


What does an UNIQUE KEY constraint for a primary key mean?

在Symfony2文档"如何使用PdoSessionStorage将会话存储在数据库中"中,显示的会话表如下:

CREATE TABLE `session` (
    `session_id` varchar(255) NOT NULL,
    `session_value` text NOT NULL,
    `session_time` int(11) NOT NULL,
    PRIMARY KEY (`session_id`),
    UNIQUE KEY `session_id_idx` (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

为什么主键需要唯一的键约束?

主键根据定义是唯一的键。在本例中,它只是一个重复的非必需密钥。

在其他情况下,主键可能是复合的(由两个或多个字段组成),这种二级索引将允许主键的各个组件单独寻址。

例如:

create table X {
    a char,
    b char,
    primary key (a,b)
}

在使用WHERE b=something进行查询的情况下,不会使用主键索引,因为B的索引项绑定到"a",并且在查询中没有使用"a"。添加一个仅专用于B的辅助独立索引允许索引用于where子句。

主键必须是唯一的。(与RDBMS无关)

主键是唯一指定一行的列的组合。