![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=1738866133-cEYuLwhktK0T6xOC6iEbDdg4gIgWAIwB-0-ae96b47b324770b0f85ef117cdada0ee)
主键,又称主码,是表中一列或多列的组合。主键约束(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=1738866133-E3PDnhFv4oovlsp2rzjcRprhhkI1sE8l-0-9005ac926493000d566c4d535c0de12f)
在Hotel数据库中定义数据表Roominfo,为Roomid创建主键约束。输入以下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_23981.jpg?sign=1738866133-ND4GrfWf0AfWUKyQjbDiLM6po9GMDC98-0-9818e9449c93193407ffdfbcbde233ef)
单击“执行”按钮,即可完成创建数据表时添加主键的操作,如图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=1738866133-C1QmpykHX1YAoKK4S04aXbyJVFgErOBM-0-28913a1a7b75a9231f66ff2a0cc0901a)
图5-1 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_4105.jpg?sign=1738866133-hCdtT5Ka94WcEdGS6GcmDSZO9unl65Aw-0-3cc675f34e9c74ee1c342fbc335818b1)
图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=1738866133-zVdqGLFmSVzbqeimT1gJCQe9vDptXwLf-0-ca1fbe3d61008be334cdd31cfd0d5903)
单击“执行”按钮,即可完成创建数据表并在定义完所有字段列之后添加主键的操作,如图5-3所示。
执行完成之后,使用“DESC Roominfo_01;”语句查看表结构,执行结果如图5-4所示。从结果可以看出这两种添加主键的方式一样,都会在Roomid字段上设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4175.jpg?sign=1738866133-d9Z5SSmoEW8smQmVJy0eWj9mn4uduUTp-0-bddbb738aa62f03201edebafce432e79)
图5-3 创建表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4176.jpg?sign=1738866133-oJXQkbkzqQY5LRSfnZZGFq5zwlUoHIM6-0-4860c5fa59a1896c9c7fa789f76c9aa9)
图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=1738866133-psXGvnJp9OQRRFpVXuq28IYk823lVy36-0-71e6508944be1356dabe524f984cd8eb)
单击“执行”按钮,即可完成创建数据表操作,如图5-5所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-6所示。从结果可以看出Roomid字段上并未设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4247.jpg?sign=1738866133-EqhztsXgBH5RxlQf1tm1Ly3fidGtHWZp-0-60f291267a5d143e059ba37d2a8dbadf)
图5-5 创建数据表Roominfo_02
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4248.jpg?sign=1738866133-6yG6t7veBYoQPMs1qpe1TXfWnDMWcm3T-0-a478d8309d984af497ec3711d33297cd)
图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=1738866133-BOgsaNYDD5qxRUf13Vo5tc1gG2Oxly5h-0-52a7d3b558b20acd8caca43beabe5763)
图5-7 修改表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4278.jpg?sign=1738866133-jxnTMOI7n2A95EdtALCxPxdGO9HDxHzX-0-3c3ab8964f7452ed8eb68f0c330954bf)
图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=1738866133-eKy2IBMHBz5dRWoXA12fxVw484O51n3b-0-bf93eb2b63fcc8f17c68dd3aba00e38f)
单击“执行”按钮,即可完成数据表的创建以及联合主键约束的添加操作,如图5-9所示。执行完成之后,使用“DESC userinfo;”语句查看表结构,执行结果如图5-10所示,从结果可以看出name字段和tel字段组合在一起成为userinfo的多字段联合主键。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4354.jpg?sign=1738866133-Kh9Y8USNQ5hexvJWq0Y0zaOqq2qlEjai-0-3ab424635b6ca6d10028abaa4e8a3752)
图5-9 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4355.jpg?sign=1738866133-S6pIz2MkYeVU4TpkSpJWimrd6AUMSzhp-0-f887dd540afd4def3f96930c50012cc8)
图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=1738866133-nEqiTk7SSJjUtTQ3BlmuVNTM34Apty5c-0-867618243e0616424cc4cd1c1a292508)
图5-11 执行删除主键约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_24094.jpg?sign=1738866133-IaIsNHEYWaTqICPDVazh9JZaXlJ1cwNP-0-f707dd559a5b3c75eb21297c69d53cf9)
图5-12 主键约束被删除