如何在 SQLite 中创建表
SQLite 的表创建功能既灵活又强大,能够满足各种数据存储需求。
发布于
表是 SQLite 数据库存储数据的核心结构,就像精心设计的文件柜抽屉,每个抽屉都有自己的分类方式和收纳规则。无论是简单的联系人列表还是复杂的企业管理系统,都需要通过创建表来组织数据。SQLite 提供了一套简洁而强大的表创建语法,让开发者能够轻松定义符合业务需求的数据结构。
为什么需要创建表
表是关系型数据库的基础构建块,它决定了:
- 数据结构:定义存储哪些信息以及信息的类型
- 数据关系:建立不同数据实体之间的联系
- 约束规则:确保数据的有效性和一致性
- 查询效率:影响数据检索和操作的性能
一个好的表设计就像建筑的蓝图,直接影响着整个数据库系统的稳定性和效率。
基础表创建语法
SQLite 使用 CREATE TABLE 语句来创建新表,这是最基本的表创建方式。
最简单的表结构
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
);
这个语句创建了一个包含三个字段的用户表,其中 id 是主键。
带约束的字段定义
CREATE TABLE products (
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL CHECK (price > 0),
stock INTEGER DEFAULT 0
);
这里我们添加了 NOT NULL、CHECK 和 DEFAULT 等约束条件。
字段数据类型详解
SQLite 采用动态类型系统,但为清晰起见仍建议指定数据类型。
常用数据类型
- INTEGER:整型数字,可用于自增主键
- REAL:浮点数字
- TEXT:字符串文本
- BLOB:二进制数据
- NUMERIC:通用的数字类型
实际应用示例
CREATE TABLE documents (
doc_id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
file_size INTEGER,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
is_encrypted INTEGER CHECK (is_encrypted IN (0, 1))
);
主键与外键设计
合理的键设计是建立数据关系的基础。
单列主键
CREATE TABLE employees (
emp_id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
department TEXT
);
复合主键
CREATE TABLE order_items (
order_id INTEGER,
product_id INTEGER,
quantity INTEGER,
PRIMARY KEY (order_id, product_id)
);
外键关系
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
customer_id INTEGER,
order_date TEXT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
高级表约束条件
SQLite 支持多种约束来保证数据完整性。
唯一约束
CREATE TABLE students (
student_id INTEGER PRIMARY KEY,
student_number TEXT UNIQUE,
name TEXT NOT NULL
);
检查约束
CREATE TABLE temperature_log (
log_id INTEGER PRIMARY KEY,
sensor_id INTEGER,
temp_value REAL CHECK (temp_value BETWEEN -50 AND 100),
log_time TEXT DEFAULT CURRENT_TIMESTAMP
);
默认值设置
CREATE TABLE blog_posts (
post_id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
view_count INTEGER DEFAULT 0,
publish_status TEXT DEFAULT 'draft'
);
临时表与视图创建
除了永久表,SQLite 还支持临时表和视图。
临时表示例
CREATE TEMP TABLE temp_results (
id INTEGER PRIMARY KEY,
calculation REAL
);
临时表只在当前会话中存在,连接关闭后自动删除。
视图创建
CREATE VIEW active_users AS
SELECT user_id, username, last_login
FROM users
WHERE last_login > date('now', '-30 days');
视图是基于查询结果的虚拟表,不存储实际数据。
实际业务场景示例
让我们看几个不同业务场景下的表设计实例。
电商系统表设计
CREATE TABLE customers (
customer_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
join_date TEXT DEFAULT CURRENT_DATE
);
CREATE TABLE products (
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
category TEXT,
price REAL CHECK (price > 0),
stock INTEGER DEFAULT 0
);
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY AUTOINCREMENT,
customer_id INTEGER NOT NULL,
order_date TEXT DEFAULT CURRENT_TIMESTAMP,
status TEXT CHECK (status IN ('pending', 'shipped', 'delivered')),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
博客系统表设计
CREATE TABLE authors (
author_id INTEGER PRIMARY KEY AUTOINCREMENT,
pen_name TEXT NOT NULL UNIQUE,
bio TEXT,
join_date TEXT DEFAULT CURRENT_DATE
);
CREATE TABLE articles (
article_id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
author_id INTEGER NOT NULL,
publish_date TEXT,
view_count INTEGER DEFAULT 0,
FOREIGN KEY (author_id) REFERENCES authors(author_id)
);
CREATE TABLE tags (
tag_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL
);
CREATE TABLE article_tags (
article_id INTEGER,
tag_id INTEGER,
PRIMARY KEY (article_id, tag_id),
FOREIGN KEY (article_id) REFERENCES articles(article_id),
FOREIGN KEY (tag_id) REFERENCES tags(tag_id)
);
总结
SQLite 的表创建功能既灵活又强大:
- 基础结构:使用 CREATE TABLE 定义字段和基本约束
- 键设计:合理使用主键和外键建立数据关系
- 高级约束:通过 UNIQUE、CHECK 等保证数据质量
- 特殊表类型:临时表和视图满足特定场景需求
在实际开发中建议:
- 提前规划好表结构和关系
- 为重要字段添加适当的约束条件
- 使用有意义的字段名和表名
- 考虑添加注释说明表的设计意图
良好的表设计是数据库应用的基石,值得投入时间仔细规划。记住,表结构一旦确定后修改成本很高,前期多花一小时思考可能节省后期数十小时的维护时间。