主关键字(primary key)是表中的一个或多个栏位,它的值用于唯一地标识表中的某一条记录。在两个表的关係中,主关键字用来在一个表中引用来自于另一个表中的特定记录。主关键字是一种唯一关键字,表定义的一部分。一个表的主键可以由多个关键字共同组成,并且主关键字的列不能包含空值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。
基本介绍
- 中文名:主关键字
- 外文名:primary key
- 介绍:一个表只有一个主关键字
- 简称:主键
- 作用:保持实体的完整性
概念
概述
主关键字(主键,primary key)是被挑选出来,作表的行的唯一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个栏位,也可以由多个栏位组成,分别称为单栏位主键或多栏位主键。又称主码。并且它可以唯一确定表中的一行数据,或者可以唯一确定一个实体。
主关键字

码的定义:
设K是关係模式R(U,F)中的属性或属性组,K’是K的任一子集。若K→U,而不存在K’→U,则K为R的候选码(Candidate Key)
Ø 若候选码多于一个,则选其中的一个为主码(Primary Key);
Ø 包含在任一候选码中的属性,叫做主属性(Primary Attribute);
Ø 不包含在任何码中的属性称为非主属性(Nonprime Attribute)或非码属性(Nonkey Attribute)
Ø 关係模式中,最简单的情况是单个属性是码,称为单码(Single Key);最极端的情况是整个属性组是码,称为全码(All-Key)。
全码的例子
签约(演员名,製片公司,电影名)
外码:设有两个关係R和S,X是R的属性或属性组,并且X不是R的码,但X是S的码(或与S的码意义相同),则称X是R的外部码(Foreign Key),简称外码或外键。
如:职工(职工号,姓名,性别,职称,部门号)
部门(部门号,部门名,电话,负责人)
其中职工关係中的“部门号”就是职工关係的一个外码。
在此需要注意,在定义中说X不是R的码,并不是说X不是R的主属性,X不是码,但可以是码的组成属性,或者是任一候选码中的一个主属性。
作用
1)保证实体的完整性;
2)加快资料库的操作速度;
3)在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重複;
4) ACCESS自动按主键值的顺序显示錶中的记录。如果没有定义主键,则按输入记录的顺序显示錶中的记录。
遵循原则
建立主键应该遵循的原则
1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关係的连线表中的数据,并抱怨它没有什幺用处,那就证明它的主键设计地很好。
2. 永远也不要更新主键。实际上,因为主键除了唯一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
注:这项原则对于那些经常需要在数据转换或多资料库合併时进行数据整理的数据并不适用。
3. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
4. 主键应当由计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了唯一标识一行以外的意义。一旦越过这个界限,就可能产生人为修改主键的动机,这样,这种系统用来连结记录行、管理记录行的关键手段就会落入不了解资料库设计的人的手中。
特点
1) 一个表中只能有一个主键。如果在其他栏位上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设定一个主键。
2)主键的值不可重複,也不可为空(NULL)。
定义方法
在表的设计视图中,选择要定义为主键的一个或多个栏位(如果是单栏位,可以单击该栏位左侧的选定器;如果是多个栏位,可以先按住CTRL键,再次单击这些栏位的选定器),然后单击工具列上的"主键"按钮,或者单击右键,从快捷选单中选择“主键”命令。
定义主键后,在主键的左侧会显示一个钥匙状的图示,表示该栏位已被设为主键,如果没有定义主键,则在保存表时,ACCESS会弹出一个讯息对话框,询问用户是否创建主键。如果选择“否”,则不创建主键;选择“是”,则ACCESS会自动创建一个自动编号类型的栏位并添加到表的第一列,作为该表的主键。
若要取消主键,可以先选定该主键栏位,再单击工具列上的“主键”按钮。
软道语录
主键
主键是实体中用于区分,识别不同实体的属性。
主键方式
在建置新表格时设定主键的方式
MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));