SQLite 的约束机制确保数据的完整性和一致性:
-
NOT NULL 约束
- 确保列不接受 NULL 值
- 插入或更新时如果违反约束会报错
sqlCREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ); -
UNIQUE 约束
- 确保列中的所有值都是唯一的
- 可以应用于单列或多列组合
- 自动创建索引以提高性能
sqlCREATE TABLE users ( id INTEGER PRIMARY KEY, email TEXT UNIQUE ); -
PRIMARY KEY 约束
- 唯一标识表中的每一行
- 自动创建 NOT NULL 和 UNIQUE 约束
- 可以是单列或复合主键
sqlCREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT ); -
FOREIGN KEY 约束
- 建立表之间的关系
- 确保引用的完整性
- 需要启用外键约束:
PRAGMA foreign_keys = ON;
sqlCREATE TABLE orders ( id INTEGER PRIMARY KEY, user_id INTEGER, FOREIGN KEY (user_id) REFERENCES users(id) ); -
CHECK 约束
- 定义列值必须满足的条件
- 可以包含复杂的表达式
sqlCREATE TABLE products ( id INTEGER PRIMARY KEY, price REAL CHECK(price > 0), quantity INTEGER CHECK(quantity >= 0) ); -
DEFAULT 约束
- 为列指定默认值
- 当插入时未提供值时使用默认值
sqlCREATE TABLE users ( id INTEGER PRIMARY KEY, status TEXT DEFAULT 'active', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -
约束冲突处理
- 使用 ON CONFLICT 子句处理约束冲突
- 可选值:ROLLBACK、ABORT、FAIL、IGNORE、REPLACE
sqlINSERT OR REPLACE INTO users (id, name) VALUES (1, 'John');
合理使用约束可以确保数据质量,防止无效数据的插入和更新。