SQL PRIMARY KEY 主键约束
时间:2018-11-15 17:48:41 来源:igfitidea点击:
在本教程中,我们将解释主键约束PRIMARY KEY的概念,并向您展示如何为表创建主键约束。
主键约束PRIMARY KEY简介
主键约束声明一个列或多个列的组合,这些列的值惟一地标识表中的每一行。这个列或列的组合也称为表的主键。如果插入或更新会导致主键重复的行,SQL引擎将发出错误。换句话说,主键约束将帮助实现自动强制数据的完整性。
主键必须遵循以下几个规则:
- 每个表只有一个主键。
- 如果主键是列,则此列的值必须唯一且不能为空。如果主键由多个列组成,则这些列中的每个值组合都必须是唯一的。
- 如果主键由一个列组成,则可以将其定义为列定义的一部分。如果主键由多个列组成,则必须在CREATE TABLE语句的末尾定义它。
- 主键列的数据类型有限制,例如,它不能是BLOB、CLOB、ARRAY或nclb。
PRIMARY KEY 约束示例
只包含1列的主键约束示例
在这个例中,我们创建一个日志表来存储事务日志。logs表由两列组成:logid和message。logid是logs表的主键。我们在下面的CREATE TABLE语句中将主键约束定义作为列定义的一部分:
CREATE TABLE logs ( logid int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, message char(255) NOT NULL )
logid列定义为:
NOT NULL:列中的值不能为NULL(空)。在某些数据库管理系统中,如果将列定义为主键,那么会隐式地自动为其分配NOT NULL属性。
AUTO_INCREMENT:每当向表中插入新行时,数据库引擎就为列生成一个序列。AUTO_INCREMENT是MySQL特有的属性。AUTO_INCREMENT属性可以在SQL server中定义为IDENTITY,在PostgreSQL中定义为SERIAL。
包含多列的主键约束示例
CREATE TABLE orderdetails ( OrderID int(11) NOT NULL, ProductID int(11) NOT NULL, UnitPrice decimal(19,4) NOT NULL, Quantity smallint(6) NOT NULL, Discount float NOT NULL, PRIMARY KEY (OrderID,ProductID), )
在orderdetails表中,我们有一个主键,它由OrderID和ProductID两列组成。因此,必须在表级别定义主键约束。