# 外键约束

URL: https://caijiao.org/sqlite/types/foreign-keys
Source: docs/sqlite/types/foreign-keys.md
Description: 本章节介绍 SQLite 中的外键约束，用于维护表与表之间的数据关联性，确保数据的参照完整性。

外键约束用于保证一个表中的字段值必须在另一个表中存在，从而维护数据之间的关联关系。

## 启用外键支持

[SQLite](/sqlite/) 默认关闭外键约束，需要通过以下命令开启：

```sql
PRAGMA foreign_keys = ON;
```

## 创建带外键的表

```sql
CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  user_id INTEGER,
  order_date TEXT,
  FOREIGN KEY (user_id) REFERENCES users(id)
);
```

以上示例中，`orders` 表的 `user_id` 必须对应 `users` 表中已存在的 `id`。

## 外键约束操作

- **ON DELETE CASCADE**
  删除父表记录时，同时删除子表相关记录。

- **ON UPDATE CASCADE**
  更新父表主键时，自动更新子表对应外键。

示例：

```sql
CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  user_id INTEGER,
  order_date TEXT,
  FOREIGN KEY (user_id) REFERENCES users(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);
```

合理使用外键约束，能有效防止数据孤立和保持数据库完整性。
