小易说IT 小易说IT

SQLite 简单表结构设计示例

QLite 特性要点:

  1. 没有严格的数据类型,TEXT/INTEGER/REAL/BLOB/NUMERIC

  2. INTEGER PRIMARY KEY AUTOINCREMENT 自增主键

  3. 支持 NOT NULL / UNIQUE / DEFAULT / CHECK

  4. 不支持外键默认关闭,需要 PRAGMA foreign_keys = ON;

示例 1:用户表(最基础单表)

CREATE TABLE IF NOT EXISTS user (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL,
    nickname TEXT,
    email TEXT UNIQUE,
    phone TEXT,
    status INTEGER DEFAULT 1, -- 1正常 0禁用
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 更新时间触发器(修改时自动更新update_time)
CREATE TRIGGER IF NOT EXISTS trigger_user_update
AFTER UPDATE ON user
FOR EACH ROW
BEGIN
    UPDATE user SET update_time = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;

示例 2:一对多:用户 + 文章表

CREATE TABLE IF NOT EXISTS article (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    title TEXT NOT NULL,
    content TEXT,
    view_count INTEGER DEFAULT 0,
    is_publish INTEGER DEFAULT 0, -- 0草稿 1发布
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE
);

CREATE TRIGGER IF NOT EXISTS trigger_article_update
AFTER UPDATE ON article
FOR EACH ROW
BEGIN
    UPDATE article SET update_time = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;

示例 3:多对多:角色、用户角色关联表

CREATE TABLE IF NOT EXISTS role (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    role_name TEXT NOT NULL UNIQUE,
    remark TEXT,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS user_role (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    role_id INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE,
    FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE,
    UNIQUE(user_id, role_id) -- 防止重复绑定角色
);

常用初始化语句

-- 开启外键约束(每次连接都要执行)
PRAGMA foreign_keys = ON;

-- 查看表
.tables
-- 查看建表语句
.schema user

本文原创作者:易君召,详见:https://www.yijunzhao.cc/about,转载请注明出处。

原文链接 https://www.yijunzhao.cc/archives/sqlite-simple-table-structure-design-example

欢迎访问 https://www.yijunzhao.cc/

https://www.yijunzhao.cc/