5.2 主键约束
主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为两种类型:单字段和多字段联合主键。
5.2.1 创建表时添加主键
如果主键包含一个字段,则所有记录的该字段值不能相同或为空值;如果主键包含多个字段,则所有记录的该字段值的组合不能相同,而单个字段值可以相同,一个表中只能有一个主键,也就是说只能有一个PRIMARY KEY约束。
注意:数据类型为IMAGE和TEXT的字段列不能定义为主键。
创建表时创建主键的方法是在数据列的后面直接添加关键字PRIMARY KEY,语法格式如下:
字段名 数据类型 PRIMARY KEY
主要参数介绍如下。
- 字段名:表示要添加主键约束的字段。
- 数据类型:表示字段的数据类型。
- PRIMARY KEY:表示所添加约束的类型为主键约束。
【实例1】假如,要在酒店客户管理系统的数据库Hotel中创建一个数据表,用于保存房间信息,并给房间编号添加主键约束,表的字段名和数据类型如表5-1所示。
表5-1 房间信息表
在Hotel数据库中定义数据表Roominfo,为Roomid创建主键约束。输入以下SQL语句:
单击“执行”按钮,即可完成创建数据表时添加主键的操作,如图5-1所示。
执行完成之后,使用“DESC Roominfo;”语句查看表结构,执行结果如图5-2所示。从结果可以看出Roominfo数据表中Roomid的Key属性的值为PRI,这就说明Roomid字段为当前数据表的主键,添加主键成功。
图5-1 执行SQL语句
图5-2 表设计结构
除了在定义字段列时添加主键外,还可以在定义完所有字段列之后添加主键,语法格式如下:
[CONSTRAINT<约束名>] PRIMARY KEY [字段名]
主要参数介绍如下。
- CONSTRAINT:创建约束的关键字。
- 约束名:设置主键约束的名称。
- PRIMARY KEY:表示所添加约束的类型为主键约束。
- 字段名:表示要添加主键约束的字段。
【实例2】在Hotel数据库中定义数据表Roominfo_01,为Roomid创建主键约束。输入以下SQL语句:
单击“执行”按钮,即可完成创建数据表并在定义完所有字段列之后添加主键的操作,如图5-3所示。
执行完成之后,使用“DESC Roominfo_01;”语句查看表结构,执行结果如图5-4所示。从结果可以看出这两种添加主键的方式一样,都会在Roomid字段上设置主键约束。
图5-3 创建表时添加主键
图5-4 查看表的设计结构
5.2.2 修改表时添加主键
数据表创建完成后,如果还需要为数据表创建主键约束,此时不需要再重新创建数据表。可以使用Alter语句为现有表添加主键。使用ALTER语句在现有数据表中创建主键,语法格式如下:
ALTER TABLE table_name ADD CONSTRAINT 约束名 PRIMARY KEY (column_name1, column_name2,…)
主要参数介绍如下。
- CONSTRAINT:创建约束的关键字。
- 约束名:设置主键约束的名称。
- PRIMARY KEY:表示所添加约束的类型为主键约束。
【实例3】在Hotel数据库中定义数据表Roominfo_02,创建完成之后,在该表中的Roomid字段上创建主键约束。输入以下SQL语句:
单击“执行”按钮,即可完成创建数据表操作,如图5-5所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-6所示。从结果可以看出Roomid字段上并未设置主键约束。
图5-5 创建数据表Roominfo_02
图5-6 Roominfo_02表结构
下面给Roomid字段添加主键,输入SQL语句:
ALTER TABLE Roominfo_02 ADD CONSTRAINT 编号 PRIMARY KEY(Roomid);
单击“执行”按钮,即可完成创建主键的操作,如图5-7所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-8所示。从结果可以看出Roomid字段上设置了主键约束。
图5-7 修改表时添加主键
图5-8 为Roomid列添加主键约束
注意:数据表创建完成后,如果需要给某个字段创建主键约束,该字段必须不允许为空,如果为空,则在创建主键约束时会报错。
5.2.3 创建联合主键约束
在数据表中,可以定义多个字段为联合主键约束,如果对多字段定义了PRIMARY KEY约束,则一列中的值可能会重复,但来自PRIMARY KEY约束定义中所有列的任何值组合必须唯一。语法格式如下:
PRIMARY KEY[字段1,字段2,…,字段n]
主要参数介绍如下。
- PRIMARY KEY:表示所添加约束的类型为主键约束。
- 字段n:表示要添加主键的多个字段。
【实例4】在Hotel数据库中,定义客户信息数据表userinfo,假设表中没有主键id,为了唯一确定一个客户信息,可以把name、tel联合起来作为主键。输入的SQL语句如下:
单击“执行”按钮,即可完成数据表的创建以及联合主键约束的添加操作,如图5-9所示。执行完成之后,使用“DESC userinfo;”语句查看表结构,执行结果如图5-10所示,从结果可以看出name字段和tel字段组合在一起成为userinfo的多字段联合主键。
图5-9 执行SQL语句
图5-10 为表添加联合主键约束
5.2.4 删除表中的主键
当表中不需要指定PRIMARY KEY约束时,可以使用DROP语句将其删除。通过DROP语句删除PRIMARY KEY约束的语法格式如下:
ALTER TABLE table_name DROP PRIMARY KEY;
主要参数介绍如下。
- table_name:要删除的主键约束的表名。
- PRIMARY KEY:主键约束关键字。
【实例5】在Hotel数据库中,删除Roominfo表中定义的主键。输入以下SQL语句:
ALTER TABLE Roominfo DROP PRIMARY KEY;
单击“执行”按钮,即可完成删除主键的操作,如图5-11所示。执行完成之后,使用“DESC Roominfo;”语句查看表结构,执行结果如图5-12所示,从结果可以看出该数据表中的主键已经被删除。
图5-11 执行删除主键约束
图5-12 主键约束被删除