如何在 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 等保证数据质量
  • 特殊表类型:临时表和视图满足特定场景需求

在实际开发中建议:

  1. 提前规划好表结构和关系
  2. 为重要字段添加适当的约束条件
  3. 使用有意义的字段名和表名
  4. 考虑添加注释说明表的设计意图

良好的表设计是数据库应用的基石,值得投入时间仔细规划。记住,表结构一旦确定后修改成本很高,前期多花一小时思考可能节省后期数十小时的维护时间。