2011-05-25 38 views
1

在Symfony2的文档“如何使用PdoSessionStorage存储会话在数据库”,这表明这样的会话表:主键的UNIQUE KEY约束是什么意思?

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; 

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

回答

6

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

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

例如:

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

,你做WHERE b=something查询时,不会使用主键索引,因为B的索引条目被绑定到“A”,和你没有使用“A”在查询中。添加一个专用于B的次级索引可以使索引用于此where子句。

+0

+1用于显示组合主键的示例,并分别提及索引组件列。 – 2011-05-25 02:54:03

+0

所以,当主键是单一的,没有必要为主键定义唯一的键,不是吗? – xdazz 2011-05-25 02:58:05

+0

@xdazz:是的,确切的。主键是自动定义的唯一键,因此在主键定义之上添加第二个唯一键只是浪费资源 – 2011-05-25 14:13:25

2

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

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