Php 主键的唯一键约束意味着什么?
在Symfony2文档“如何使用PdoSessionStorage在数据库中存储会话”中,显示如下会话表:Php 主键的唯一键约束意味着什么?,php,mysql,symfony,Php,Mysql,Symfony,在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_
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)
}
如果使用
执行查询,其中b=something
,则不会使用主键索引,因为b的索引项与“a”绑定,并且在查询中没有使用“a”。添加一个专用于B的二级独立索引,允许索引用于where子句。主键定义为唯一键。在本例中,它只是一个重复的非必需密钥
在其他情况下,如果主键可能是复合的(由两个或多个字段组成),这样的二级索引将允许单独处理主键的各个组件
例如:
create table X {
a char,
b char,
primary key (a,b)
}
如果使用
执行查询,其中b=something
,则不会使用主键索引,因为b的索引项与“a”绑定,并且在查询中没有使用“a”。添加一个专用于B的二级单独索引,允许索引用于此where子句。+1用于显示复合主键的示例和单独提及对组件列进行索引。因此,当主键是单个的时,不需要为主键定义唯一的键,不是吗?@xdazz:是的,完全正确。主键是自动的,并且根据定义是唯一键,因此在主键定义的顶部添加第二个唯一键只是浪费资源+1,用于显示复合主键的示例和单独提及对组件列进行索引。因此,当主键是单主键时,没有必要为主键定义唯一的键,不是吗?@xdazz:没错。主键是自动的,并且根据定义是唯一键,因此在主键定义的顶部添加第二个唯一键只是浪费资源