插件窝 干货文章 mysql主键必须是唯一的吗

mysql主键必须是唯一的吗

唯一性 唯一 索引 必须 270    来源:    2025-03-28

MySQL 主键的唯一性要求

是的,在MySQL中,主键(PRIMARY KEY)必须是唯一的。这是关系型数据库的基本设计原则之一。

主键的主要特性

  1. 唯一性:主键列中的每个值必须是唯一的,不能有重复值
  2. 非空性:主键列不能包含NULL值
  3. 单一性:每个表只能有一个主键(但主键可以由多个列组成复合主键)

为什么主键必须唯一

  • 数据完整性:确保表中每一行都可以被唯一标识
  • 索引优势:主键自动创建唯一索引,提高查询性能
  • 外键关系:作为其他表的外键引用时,必须保证唯一性

主键类型示例

-- 单列主键
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

-- 复合主键(多列组合必须是唯一的)
CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);

-- 自增主键(常见用法)
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

违反唯一性的情况

如果尝试插入或更新数据导致主键重复,MySQL会报错:

ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

如果您需要一个允许重复的索引,应该使用普通索引(INDEX)或唯一索引(UNIQUE KEY)而不是主键。