为什么我们需要主键?

时间:2019-02-05 05:11:01

标签: sql sql-server mysqli

我正在阅读有关主键的信息,并且在许多教程,技术博客等中,我发现主键可以为null的答案。我认为这是完全错误的,因为我能够在列中插入空值。 我想只有在列被声明为非null的情况下,主键才能具有非null的值。但这又不是主键的功能。

我的另一个问题是为什么我们有主键的概念,因为我发现主键和唯一键之间只有一个区别是“主键只能在一个列上声明而唯一键可以在多列上声明”。所以我的理解是,如果没有其他区别,为什么我们也不能将主键声明为唯一键。

3 个答案:

答案 0 :(得分:5)

  

我想只有在列中主键才可以有一个非空值   声明为非null。但这又不是primary的功能   键。

主键不能为空值。根据主键的定义,它是 UNIQUE NOT NULL

  

我的另一个问题是,为什么我们要有主键的概念   因为我发现主键和唯一键之间只有一个区别   就是“主键只能在一列上声明,而唯一   键可以在多列上声明”

这是完全错误的。您也可以在多列上创建主键,主键和唯一键之间的区别是主键不为空,唯一键可以具有空值。

主键的主要目的是识别行的唯一性,其中唯一键是为了防止重复,以下是主键和唯一键之间的主要区别。

主键:

  1. 一个表只能有一个主键。
  2. 主键由一个或多个列组成。
  3. 主键可增强表的实体完整性。
  4. 所有定义的列都必须定义为NOT NULL
  5. 主键唯一地标识一行。
  6. 默认情况下,主键会产生CLUSTERED个唯一索引。

唯一键:

  1. 一个表上可以定义多个唯一键。

  2. 唯一键默认情况下会产生NONCLUSTERED个唯一索引。

  3. 一个或多个列组成一个唯一键。

  4. 列可能为NULL,但每列允许一个NULL

  5. Foreign Key Constraint可以引用唯一约束。

我建议您阅读此primary key and unique key

答案 1 :(得分:0)

您忘记了索引编制。当涉及到大数据以查找特定的原始数据时,需要逐条记录地遍历内存。为了克服这一点,存在索引的概念。主键对此有所帮助。因此,这将有助于您更快地访问数据。此后,有了二进制搜索的概念,它将进一步帮助完成该任务。

答案 2 :(得分:0)

主键是特殊的关系数据库表列(或列的组合),其指定用于唯一地标识所有表记录。

主键的主要功能是:

  • 每行数据必须包含唯一值。
  • 它不能包含空值。

主键可以是现有的表列,也可以是数据库根据定义的顺序专门生成的列。

主键概念对于高效的关系数据库至关重要。没有主键和紧密相关的外键概念,关系数据库将无法工作。

主键,也称为主关键字,是关系数据库中每个记录唯一的键。

一个表只有一个主键。