![MySQL入门很轻松(微课超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/406/32858406/b_32858406.jpg)
5.2 主键约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P97_23979.jpg?sign=1738949085-lzdiCglYPAludttuXaNYib6bqeItBgVJ-0-46d2bc0660c25f66876a13053c8e40bc)
主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键和记录之间的关系如同身份证和人之间的关系,它们之间是一一对应的。主键分为两种类型:单字段和多字段联合主键。
5.2.1 创建表时添加主键
如果主键包含一个字段,则所有记录的该字段值不能相同或为空值;如果主键包含多个字段,则所有记录的该字段值的组合不能相同,而单个字段值可以相同,一个表中只能有一个主键,也就是说只能有一个PRIMARY KEY约束。
注意:数据类型为IMAGE和TEXT的字段列不能定义为主键。
创建表时创建主键的方法是在数据列的后面直接添加关键字PRIMARY KEY,语法格式如下:
字段名 数据类型 PRIMARY KEY
主要参数介绍如下。
- 字段名:表示要添加主键约束的字段。
- 数据类型:表示字段的数据类型。
- PRIMARY KEY:表示所添加约束的类型为主键约束。
【实例1】假如,要在酒店客户管理系统的数据库Hotel中创建一个数据表,用于保存房间信息,并给房间编号添加主键约束,表的字段名和数据类型如表5-1所示。
表5-1 房间信息表
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-T98_23980.jpg?sign=1738949085-5xXT9FjaODZPBkcG7u7T5GX54ArwkYeR-0-d352fcf17561430ca0d716e5fc711abe)
在Hotel数据库中定义数据表Roominfo,为Roomid创建主键约束。输入以下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_23981.jpg?sign=1738949085-ePHQ3u8XRQf8q8RuLD361KInNpMVRCks-0-8e440e7ab43190e6445b52c71bbc8d11)
单击“执行”按钮,即可完成创建数据表时添加主键的操作,如图5-1所示。
执行完成之后,使用“DESC Roominfo;”语句查看表结构,执行结果如图5-2所示。从结果可以看出Roominfo数据表中Roomid的Key属性的值为PRI,这就说明Roomid字段为当前数据表的主键,添加主键成功。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_4104.jpg?sign=1738949085-MaYh7nnb8eTZjiicUGLQJ0njTBc1ZbpG-0-dd69b2bb3ea5028c96233f0a4a018493)
图5-1 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_4105.jpg?sign=1738949085-ZoqxeZTeiXrpZ6DE1SE2DyufdF7YSYiM-0-3af3a29e303cc7e33b41e0f3f928722e)
图5-2 表设计结构
除了在定义字段列时添加主键外,还可以在定义完所有字段列之后添加主键,语法格式如下:
[CONSTRAINT<约束名>] PRIMARY KEY [字段名]
主要参数介绍如下。
- CONSTRAINT:创建约束的关键字。
- 约束名:设置主键约束的名称。
- PRIMARY KEY:表示所添加约束的类型为主键约束。
- 字段名:表示要添加主键约束的字段。
【实例2】在Hotel数据库中定义数据表Roominfo_01,为Roomid创建主键约束。输入以下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_23983.jpg?sign=1738949085-DiSeaRlFengOVBt2KW5ozd8w5iiJAzDN-0-9831f978f092e803fbfa6f06dfc37630)
单击“执行”按钮,即可完成创建数据表并在定义完所有字段列之后添加主键的操作,如图5-3所示。
执行完成之后,使用“DESC Roominfo_01;”语句查看表结构,执行结果如图5-4所示。从结果可以看出这两种添加主键的方式一样,都会在Roomid字段上设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4175.jpg?sign=1738949085-jabtlUffeTg46ISNJckXx6jzI8ziw5eq-0-f4410d8401f7ee7ef124b73126ea3b37)
图5-3 创建表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4176.jpg?sign=1738949085-ykxq0pg7DZWbn741yQ5VEFUwWf8Zu3a6-0-458dc38cd565df2415bc98ef04c5d2d5)
图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语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_23987.jpg?sign=1738949085-iodnLx1OgfzBAam4uiBZZWNH92AanutP-0-d670ccb7790fbf56ba9cf4b2acdc230a)
单击“执行”按钮,即可完成创建数据表操作,如图5-5所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-6所示。从结果可以看出Roomid字段上并未设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4247.jpg?sign=1738949085-Vbvq40ekToOAu8kGyp1DfEzgBza1n8iO-0-950aa153fd457fcbd7e88904f2a96575)
图5-5 创建数据表Roominfo_02
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4248.jpg?sign=1738949085-f9RA0WOBDfxBHmKovHKMwkzivrHmVA3j-0-52f617e27da271222427b4b019087e5c)
图5-6 Roominfo_02表结构
下面给Roomid字段添加主键,输入SQL语句:
ALTER TABLE Roominfo_02 ADD CONSTRAINT 编号 PRIMARY KEY(Roomid);
单击“执行”按钮,即可完成创建主键的操作,如图5-7所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-8所示。从结果可以看出Roomid字段上设置了主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4277.jpg?sign=1738949085-Nogv8Cv7pAcMeXb2Gbv7DszH5dZZOUWp-0-e77f4b0bdd3e62fb94fe40e598dd3619)
图5-7 修改表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4278.jpg?sign=1738949085-DKf0zr4o9h9GxiEztYBgHozdl07eM5Q6-0-9b8b1b10e3cd9a9d30356efb198a2a48)
图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语句如下:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_23993.jpg?sign=1738949085-SuwUWQSgqvCAjgDKsokE2qyIklTOaQYz-0-fae32cacd988c9bf051edea1f9f4789a)
单击“执行”按钮,即可完成数据表的创建以及联合主键约束的添加操作,如图5-9所示。执行完成之后,使用“DESC userinfo;”语句查看表结构,执行结果如图5-10所示,从结果可以看出name字段和tel字段组合在一起成为userinfo的多字段联合主键。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4354.jpg?sign=1738949085-o1jArjEGNSxfM1tz76rT13lMT0t2QMsE-0-e3d33ec86c5ec52d57682a04260bbea9)
图5-9 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4355.jpg?sign=1738949085-1Qg9qwxuW2mK13wbFpAmFliIdJqZG85S-0-90c6aa0a04a1e3b0e511bb470ab87c3c)
图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所示,从结果可以看出该数据表中的主键已经被删除。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4394.jpg?sign=1738949085-maF9pwBd7a2LfOTH0Tz5q9V26GA22XSf-0-40025d0510ca152563f90338e5edee4a)
图5-11 执行删除主键约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_24094.jpg?sign=1738949085-L8T9CKM8uixD71BuFH84DlgpIjjzq6g4-0-e70995751d818b51d0e09fc9a9645803)
图5-12 主键约束被删除