在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;
为什么主键需要唯一键约束?
答案 0 :(得分:6)
主键根据定义是唯一键。在这个例子中,它只是一个重复的不必要的密钥。
在其他情况下,主键可能是复合的(由两个或多个字段组成),这样的二级索引将允许单独处理主键的各个组件。
例如:
create table X {
a char,
b char,
primary key (a,b)
}
使用WHERE b=something
进行查询时,不会使用主键索引,因为B的索引条目与'a'相关联,并且您在查询中没有使用'a'。添加专用于B的辅助单独索引允许使用此where子句的索引。
答案 1 :(得分:2)
根据定义,主键必须是唯一的。 (无论RDBMS如何)
主键是唯一指定行的列的组合。