2014-09-06 1235 views
3

我读过,mysql在主键上放置了一个不为空的约束,但是唯一键允许一列有一个空值。那么为什么不是主键也允许一个空值?为什么主键不能包含空值?

+0

当插入0,缺省值,NULL值转换成与主键列然后推新自动增量值 – zloctb 2014-11-05 15:26:08

回答

6

PRIMARY KEY列相当于UNIQUE和NOT NULL,默认情况下索引列。
它应该是唯一的,因为主键标识表中的行,所以2个不同的行不应该有相同的键。
另外,主键可以在其他表中使用FOREIGN KEY,这就是为什么它不能为NULL,以便其他表可以查找引用表中的行。

例如:

CREATE person{ 
    id INT PRIMARY KEY, -- equals UNIQUE NOT NULL 
    name VARCHAR(20) 
}; 

CREATE family{ 
    id INT PRIMARY KEY, -- equals UNIQUE NOT NULL 
    menber_id INT FOREIGN KEY REFERENCE person(id) 
}; 
+2

+1外键 – 2014-09-06 14:52:00

2

主键必须唯一地标识一个记录 - 即每个记录可以用“具有等于X的键的记录”的术语表示。由于null不等于任何值,因此不能用作主键。

+2

或放换句话说,'NULL'实际上表示__不存在value_,它本身并不是一个值。 – Alnitak 2014-09-06 14:36:28

1

主键用于在不能为空,而唯一键可能包含空值按SQL规则的表中唯一标识行。

例如,

一个表包含学童数据的记录像下面:

Roll_NO | Name | Class | Address | School_Bus_ID 

这里,Roll_NO不应包含任何空值,因为它会被用来识别一个学生学校 。而School_Bus_ID可能包含一些空值,因为有些孩子可能会选择自己的交通工具,而不是校车。

-1

这是主键和唯一密钥之间的主要区别。

+1

OP已经知道有区别。他们在问为什么。 – 2014-09-06 14:53:04

0

由于空值,是未知的,可能是相同的。在另一元组的主关键字的值