# 主键与唯一约束

URL: https://caijiao.org/mariadb/table/primary-unique
Source: docs/mariadb/table/primary-unique.md
Description: 本节详细讲解 MariaDB 中主键（PRIMARY KEY）和唯一约束（UNIQUE）的作用与区别，包含创建和修改表时如何设置这些约束的示例。

## 1. 主键（PRIMARY KEY）

- 唯一标识表中的每一条记录。
- 不能包含 NULL 值。
- 一个表只能有一个主键，可以是单列或多列组合。

### 创建表时定义主键

```sql
CREATE TABLE users (
  id INT PRIMARY KEY,
  username VARCHAR(50)
);
````

### 修改表添加主键

```sql
ALTER TABLE users
ADD PRIMARY KEY (id);
```

## 2. 唯一约束（UNIQUE）

* 确保字段值唯一，但允许 NULL（根据配置，有时允许多个 NULL）。
* 一个表可以有多个唯一约束。

### 创建表时定义唯一约束

```sql
CREATE TABLE users (
  id INT,
  email VARCHAR(100) UNIQUE
);
```

### 修改表添加唯一约束

```sql
ALTER TABLE users
ADD UNIQUE (email);
```

## 3. 主键与唯一约束的区别

| 特性     | 主键（PRIMARY KEY） | 唯一约束（UNIQUE） |
| ------ | --------------- | ------------ |
| 唯一性    | 必须唯一            | 必须唯一         |
| NULL 值 | 不允许             | 允许（通常情况下）    |
| 数量     | 一个表仅能有一个主键      | 一个表可以有多个唯一约束 |

---

合理使用主键和唯一约束，可以保证数据完整性和避免重复数据。
