【问题标题】:MySQL using a unique CHAR as primary keyMySQL 使用唯一的 CHAR 作为主键
【发布时间】:2017-09-07 23:26:48
【问题描述】:

我是 SQL 编程的新手,我有一个包含两列的表,UUID(一个 32 CHAR 唯一的十六进制字符串)和权限 (只是我正在使用的系统的权限,例如“管理员”或“黑名单”)。

我在主键的概念上不是最伟大的,所以我想知道使用 UUID 作为我的主键是否有效,考虑到它是 100% 唯一的,没有空格,我已经用它来轻松索引我的查询。我没有加入任何东西,而且很可能永远也不会加入,所以使用 UUID 作为我的主键是否有效而不会产生任何不可预见的后果?

【问题讨论】:

    标签: mysql sql char key


    【解决方案1】:

    使用 UUID 作为主键有效。它满足主键所需的两个条件:

    • 它是独一无二的。
    • 它永远不会为 NULL。

    但是,这是一个坏主意。为什么? MySQL 自动按主键对数据进行聚类。也就是说,数据实际上是按主键排序的。 UUID 不是连续的。插入可以发生在任何地方,需要移动数据。

    我会推荐一个简单的自动递增主键并将 UUID 声明为唯一:

    【讨论】:

    • 或者您可以完全省略主键,并将 UUID 声明为唯一。
    • @Barmar 在 InnoDB 中具有相同的效果。如果未定义主键,并且有一个不可为空的唯一键,则该唯一键将成为聚集索引。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多