![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=1739524073-NbivhhZOuRLirg4BxRD4rEuLtae96x8a-0-416cf96725f4ab3346ea58cdfa9501d0)
主键,又称主码,是表中一列或多列的组合。主键约束(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=1739524073-n18ck0pLu4NFfDfIZyjrvBO0SBe7DTBI-0-24f96dce0127bd8936afec0f9fb55794)
在Hotel数据库中定义数据表Roominfo,为Roomid创建主键约束。输入以下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_23981.jpg?sign=1739524073-mXsDP2T8uuGWCeSM8OHdE1nrpgrN6Plr-0-957212f2fd39506a59e10af014cd0f9b)
单击“执行”按钮,即可完成创建数据表时添加主键的操作,如图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=1739524073-lmbbKqpisXwaq2m5svSZvCyoZ7bDkRt9-0-61ee377740335a6f9c931ef2c9c52206)
图5-1 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P98_4105.jpg?sign=1739524073-XkGAo0psltmIoXoBJWsmtJL8rIZjCwd1-0-4c4b19314f7adec36f4b3ed52754821c)
图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=1739524073-brNjHKBKONNTQ06Y0J7k1YifB99A4GS5-0-e059863ab49f1d4c9b5f3a3a48df1edf)
单击“执行”按钮,即可完成创建数据表并在定义完所有字段列之后添加主键的操作,如图5-3所示。
执行完成之后,使用“DESC Roominfo_01;”语句查看表结构,执行结果如图5-4所示。从结果可以看出这两种添加主键的方式一样,都会在Roomid字段上设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4175.jpg?sign=1739524073-7pWcDkLxQXM8jJi41cFxy4mEHpWgutrC-0-f5d4294e9fd69a2c900fc9942e2a4f16)
图5-3 创建表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P99_4176.jpg?sign=1739524073-alYx9t7TZqendztdup52TIw2eEMycAeL-0-1b7166c985d671f221d4ce4ca1d99b70)
图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=1739524073-lSQaaRf4DBh4NmM60sprGKTJUtrKDpCj-0-7fb00ccaab5b344e89d410e79245f6dc)
单击“执行”按钮,即可完成创建数据表操作,如图5-5所示。执行完成之后,使用“DESC Roominfo_02;”语句查看表结构,执行结果如图5-6所示。从结果可以看出Roomid字段上并未设置主键约束。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4247.jpg?sign=1739524073-ztVR9gVXyG3p60YzdMSmFz1vbpy9VqTZ-0-09a300e5de6075dd4fd25bd9f7849a76)
图5-5 创建数据表Roominfo_02
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4248.jpg?sign=1739524073-2qbwwBx6auu9NGjiEjYQhQsa0w4HnWc0-0-a40a5e04c67dd5cc24bb76f899f8c0de)
图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=1739524073-HNfPADwrJAr1KGGOK2acK1j5wN5UHqok-0-27a0b0e3b080efa48a67285834226212)
图5-7 修改表时添加主键
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P100_4278.jpg?sign=1739524073-A3Iet2Wx8OeiV0wLlMuFWnwOn1NKF4Av-0-f8af51f47aa43e423ed146d090a16a16)
图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=1739524073-qBdRa7XzOHShkNgWAzXA7OYPpnqkgdOp-0-c77094b6b0ebf6d77f0d7c96fb3f569d)
单击“执行”按钮,即可完成数据表的创建以及联合主键约束的添加操作,如图5-9所示。执行完成之后,使用“DESC userinfo;”语句查看表结构,执行结果如图5-10所示,从结果可以看出name字段和tel字段组合在一起成为userinfo的多字段联合主键。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4354.jpg?sign=1739524073-QqUGFVrWI05wRxhZmRc9Z8wqMsAF955g-0-0463567464c84024948a0dff6e28ba79)
图5-9 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_4355.jpg?sign=1739524073-ut6zbZN97HYV1xF7aaAt26q3Irv2AZot-0-f5d379d7b0b110e4796b5068339f9fd6)
图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=1739524073-PNudOX329QdsWnQuIgHGY7GQBpjrFbUA-0-706a26458410b1c56f66eb3099c2279e)
图5-11 执行删除主键约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P101_24094.jpg?sign=1739524073-kFVpdt6ePq7zmTC70qDOsHfkLtCKZmd1-0-7f4a6043955ca2e96048948e824762ca)
图5-12 主键约束被删除