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

时间:2011-05-25 02:47:28

标签: 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;

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

2 个答案:

答案 0 :(得分:6)

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

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

例如:

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

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

答案 1 :(得分:2)

根据定义,主键必须是唯一的。 (无论RDBMS如何)

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