Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL主键生成方式

MySQL主键生成的四种方式及对比详解

作者:四七伵

在数据库设计中,主键(Primary Key)的选择至关重要,它不仅是数据行的唯一标识,还直接影响查询效率、数据存储甚至系统架构的扩展性,本文给大家分析了常见四种主键ID生成的方式,需要的朋友可以参考下

前言

在数据库设计中,主键(Primary Key)的选择至关重要。它不仅是数据行的唯一标识,还直接影响查询效率、数据存储甚至系统架构的扩展性。MySQL中常见的主键生成方式包括自增ID、UUID、雪花算法(Snowflake)等,每种方式都有其独特的适用场景和优缺点。接下来将分析常见四种主键ID生成的方式。

一、自增ID

什么是自增ID?

自增ID是MySQL内置的主键生成方式。通过AUTO_INCREMENT关键字,每插入一条新数据,主键值自动加1。

案例:订单表

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10,2)
);

插入数据时,无需指定id字段:

INSERT INTO orders (user_id, amount) VALUES (1001, 99.99);

优点

缺点

二、UUID

什么是UUID?

UUID是一个128位的字符串(如550e8400-e29b-41d4-a716-446655440000),理论上全球唯一。

案例:用户表

CREATE TABLE users (
    uuid CHAR(36) PRIMARY KEY,
    name VARCHAR(50)
);

插入数据时生成UUID:

INSERT INTO users (uuid, name) VALUES (UUID(), '张三');

优点

缺点

三、雪花算法(Snowflake)

什么是雪花算法?

雪花算法是Twitter开源的分布式ID生成算法,生成一个64位的长整型数字,结构如下:
符号位(1位) + 时间戳(41位) + 机器ID(10位) + 序列号(12位)

案例:分布式日志表

// Java代码示例(使用Hutool工具库)
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
long id = snowflake.nextId(); // 生成类似6726434627886811136的ID

建表时使用BIGINT类型:

CREATE TABLE logs (
    id BIGINT PRIMARY KEY,
    content TEXT
);

优点

缺点

四、业务字段组合

什么是业务字段组合?

直接使用业务相关的字段作为主键(如“用户ID+商品ID”)。

案例:学生选课表

CREATE TABLE course_selection (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id)
);

优点

缺点

五、如何选择主键生成方式?

场景推荐方式理由
单机MySQL自增ID简单高效,适合小型系统
分布式系统雪花算法平衡性能与全局唯一性,适合分库分表
高安全性需求UUID避免ID被推测,适合匿名数据
强业务关联业务字段组合如订单号包含日期、用户ID等业务信息

结语

选择主键生成方式时,需综合考虑系统规模扩展性性能业务需求

实际开发中,可以结合多种方式。例如,在电商系统中,订单ID使用雪花算法保证分布式唯一性,而订单明细表则用自增ID提升插入效率。根据业务特点灵活选择,才能找到最优解

以上就是MySQL主键生成的四种方式及对比详解的详细内容,更多关于MySQL主键生成方式的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文