Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 主键的唯一键约束意味着什么?_Php_Mysql_Symfony - Fatal编程技术网

Php 主键的唯一键约束意味着什么?

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_

在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_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:没错。主键是自动的,并且根据定义是唯一键,因此在主键定义的顶部添加第二个唯一键只是浪费资源