为什么我们使用主键自增,而不仅仅是 auto_increment?

Why do we use primary key auto increment, and not just auto_increment?

我想知道为什么我们在 sql 中使用 PRIMARY_KEY_AUTO_INCREMENT 而不仅仅是 AUTO_INCREMENT 作为 table 中的 id。如果我们只是将id的数据类型设置为AUTO_INCREMENT,不会自动增加它,因此生成一个unique id 每次?因此,在 之上设置 PRIMARY_KEY(唯一标识 table 中的每个项目)有什么意义?

谢谢!!

Tbh 我真的不知道这是否是原因,但通过创建主键,您可以创建索引。索引有助于加快查询速度。您可以手动创建它们,但它们也会在主键和外键上创建。

这是 DBMS 的特定问题。让我们试着找出一些共同的优缺点。

实际上,我认为定义主键和使任何列自动递增之间没有任何相似之处。

主键不必是递增的,而是唯一的。

如果您只是将一列用作自动递增,那么如果您无意或有意地重置了自动递增的起始值,那么多列可能具有相同的值。

但是如果你把它定义为主键你就不用担心了。 如果它是主键,那么您可以将它用作其他表中的外键。 在 SQL 服务器主键将自动创建一个集群索引,它将定义表中数据的物理存储顺序。

因为 constraints, because SQL is a declarative language,并且因为它是自我记录的。

AUTO_INCREMENTPRIMARY KEY 做两件截然不同的事情。

AUTO_INCREMENT 不是标准的 SQL,但大多数数据库都有类似的东西。 In 通常使默认值成为一个递增的整数。这就是主键的机械元素:自动递增的整数是一个不错的唯一 ID。

PRIMARY KEY 做了很多事情。

  1. 列为 not null
  2. 列为 unique
  3. (非标准,但几乎总是)列已编入​​索引。
  4. 这些列被声明为主键。
  5. 不能将其他列声明为主键。

大多数是 约束 值。它必须存在 (1),它必须是唯一的 (2),并且它必须是唯一的主键 (5)。约束保证数据符合您的预期。没有它们,您可能会不小心插入具有相同主键或没有主键的多行。或者 table 可能有多个“主”键,您使用哪个?有了约束,您就不必在每次获取数据时都检查数据,您知道它会在声明的约束范围内。

索引主键 (3) 是一种优化。您可能会经常通过主键进行搜索。索引不是 SQL 标准的一部分。这可能令人惊讶。它们是实施 SQL 的细节。索引不影响查询结果,SQL 标准避免告诉数据库它们应该如何 做事。这就是为什么 SQL 如此普遍的部分原因,它是声明式的。

在声明性语言中,您不会说如何做,而是说您想要什么。 SQL 查询说明您想要什么结果,数据库会为您计算出来。您可以将上述大部分内容作为约束和触发器来实现,但如果您这样做了,数据库将无法理解 为什么 您正在这样做,并且无法使用它来帮助您解决问题.通过向数据库声明“这是主键”,它可以根据需要进行处理。数据库添加了必要的约束。数据库添加了它的优化,这可能不仅仅是索引。数据库可以在查询中使用此信息来识别唯一行。您将从 50 年的数据库理论中受益。

最后,让人知道专栏的目的。任何人都可以阅读模式并知道该列是主键。六个月后任何人都可以成为你。