主键的UNIQUE KEY约束是什么意思?

xda*_*azz 1 php mysql symfony

在Symfony2 doc'如何使用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;
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*c B 6

根据定义,主键是唯一键.在这个例子中,它只是一个重复的不必要的密钥.

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

例如:

create table X {
    a char,
    b char,
    primary key (a,b)
}
Run Code Online (Sandbox Code Playgroud)

在那里进行查询WHERE b=something,不会使用主键索引,因为B的索引条目与'a'相关联,并且您在查询中没有使用'a'.添加专用于B的辅助单独索引允许对此where子句使用索引.