- MySQL入门很轻松(微课超值版)
- 云尚科技
- 1898字
- 2021-03-29 01:04:59
5.2 主键约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P97_23979.jpg?sign=1738941676-yDqqltuZ9hXvceqjAaGKRm9sXZEBgSN8-0-a2d3a4ce63a8b75ff70a22b61ae929fc)
主键,又称主码,是表中一列或多列的组合。主键约束(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=1738941676-jSkVvaUW2jnysdpKQrqx4rqIpSTmEKBw-0-e2377d0a836f7f57ed4689b59fc2cdfa)
在Hotel数据库中定义数据表Roominfo,为Roomid创建主键约束。输入以下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_23981.jpg?sign=1738941676-H2ueY4rQGTCIxd2WJG7jWodFXfBXXCQB-0-6efdf666050141111158523cdf8216f5)
单击“执行”按钮,即可完成创建数据表时添加主键的操作,如图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=1738941676-VI4wOxjSralaxTqIf7McEgrBDYWkltMO-0-7f0daabfe1957fe640fe6793ca0bf7af)
图5-1 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_4105.jpg?sign=1738941676-ghZAZCYfeE46xV8f29dica457PYeoJGT-0-e6c8f7304ee4f09c02737d2e10c38b68)
图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=1738941676-cp5he1sx410VVdE5sNbu1MdTzzjSwp0Y-0-f6d7e55a08e9a6ef2c79d0f44835b07f)
单击“执行”按钮,即可完成创建数据表并在定义完所有字段列之后添加主键的操作,如图5-3所示。
执行完成之后,使用“DESC Roominfo_01;”语句查看表结构,执行结果如图5-4所示。从结果可以看出这两种添加主键的方式一样,都会在Roomid字段上设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4175.jpg?sign=1738941676-4LVuJlrOGRr9ZMrPhgFHFBqljdFH5NbM-0-486a2bd50cf67975c6b5676a399f8185)
图5-3 创建表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4176.jpg?sign=1738941676-kUP7xfRVd2c6b3lv76IPE31CYHsxhqEB-0-547b2e0b0812c50cb04b8b63d193f1b5)
图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=1738941676-VJHokKdUxJrSaVNgk0jRCcZJ3K4RG3lB-0-fb759a5ac9519fa81c1f3be22af7a2fc)
单击“执行”按钮,即可完成创建数据表操作,如图5-5所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-6所示。从结果可以看出Roomid字段上并未设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4247.jpg?sign=1738941676-fOOzstvILYuAIR9HQCXbPEKmK8XLUcfS-0-89f984028ec3b299ae7cfc6cd68a6391)
图5-5 创建数据表Roominfo_02
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4248.jpg?sign=1738941676-oZMOTGOobMKUZIaRBk8Cv9TZwLI3i7p2-0-514522051528331f187dc22da228752f)
图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=1738941676-ja2DhvSE2MuWcv9tWBGqme6GSGkKF9ZE-0-73344bb54cbacf101e6089bda7b00e72)
图5-7 修改表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4278.jpg?sign=1738941676-PBynpLgwCXr0cO4dk8VbMmOq7KtDknUn-0-4a93d9fe86c57c592eb9e86755471477)
图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=1738941676-2MV7OI8yBJokWpq0wNiqwlOXyvFBVwYu-0-7789b4fa5d5bed5c8a7d280dc1617a16)
单击“执行”按钮,即可完成数据表的创建以及联合主键约束的添加操作,如图5-9所示。执行完成之后,使用“DESC userinfo;”语句查看表结构,执行结果如图5-10所示,从结果可以看出name字段和tel字段组合在一起成为userinfo的多字段联合主键。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4354.jpg?sign=1738941676-9DXp0UyWQL5HQYFRQGNxzlYqbNvXq78d-0-7da09d0ff3410eb35c22cfd943b5aa4b)
图5-9 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4355.jpg?sign=1738941676-KrEvcZqo7rbaJjMXOBO9tSheTViJN2fW-0-638c54b483be68cdf02dc5d46233fae7)
图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=1738941676-aa238EQ6Zgcx09J9za19zJ3UiKO7SKS4-0-fd044c3301135c50ba00b8b4e6894d3c)
图5-11 执行删除主键约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_24094.jpg?sign=1738941676-F4xxGV65aRamkE9bOQZw7lcabnjkO1Le-0-7ec62d9a4b51cb9bcd1dbdfa2cd5e322)
图5-12 主键约束被删除