【问题标题】:What's the point of using AUTO_INCREMENT and PRIMARY KEY at the same time in MySQL?在 MySQL 中同时使用 AUTO_INCREMENT 和 PRIMARY KEY 有什么意义?
【发布时间】:2019-04-14 11:51:27
【问题描述】:

在MySQL中,我理解如下


AUTO_INCREMENT:用于使INT 的值在用户每次创建行时自动增加。

PRIMARY KEY:用于使value 在该表中唯一。


但是,在定义id 时,我经常看到它们一起使用。

我不明白将AUTO_INCREMENTPRIMARY KEY 一起使用的意义,因为AUTO_INCREMENT 本身会使id 独一无二。

创建id的时候有什么理由一起使用它们吗?

【问题讨论】:

    标签: mysql sql primary-key auto-increment


    【解决方案1】:

    主键具有三个属性:

    1. 它是独一无二的。
    2. 它不为空。
    3. 每桌只有一个。

    将键定义为主键意味着它也应该用于外键引用。

    此外,MySQL 通过主键对数据进行聚类。因此,声明指示新行位于表的“末尾”——这意味着与数据页上最近的插入相邻。

    此外,自动递增 id 的重复值可以通过多种方式创建。一种方法是可以重置增量计数器,从而导致重复。 MySQL 在并发更新的副本上应该是相当线程安全的,但是已经报告了错误。作为primary key,表格中不允许有重复项。

    【讨论】:

    • 我仍然没有得到“将键定义为主键意味着它也应该用于外键引用”的部分。是否必须这样做?请您详细说明一下,以便我理解清楚好吗?
    • @Poream3387 。 . .你了解什么是外键引用吗?
    • 哦,是的,我知道外键是什么。你是说如果我要使用外键来引用某个键,它必须是被引用的主键吗?
    • @Poream3387 。 . .不幸的是,它不是必须是。但最佳做法是仅将主键用于外键引用。
    • 哦,这就是你在帖子中的意思!谢谢!
    【解决方案2】:

    你理解正确,但他们在做不同的事情。

    PRIMARY KEYAUTO_INCREMENT 表示我们希望此列在值上不重复,如果我们没有设置值,它将自动增加。

    但是我们只设置AUTO_INCREMENT 怎么样,这只是意味着如果我们没有设置值,它将自动增加。但没有确保值是唯一的。

    【讨论】:

      【解决方案3】:

      AUTO_INCREMENT 不会使列唯一。如果缺少,它只会在创建行时“自动”填充一个值。但是您可以稍后更新这些值,或者也可以通过显式提供值来创建一行。

      PRIMARY KEY 拒绝任何会导致 2 个不同条目存储相等值的修改 sql 语句。因此,它向您保证,您的数据库处于正确状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-10
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 2010-11-26
        相关资源
        最近更新 更多