QLite 特性要点:
没有严格的数据类型,
TEXT/INTEGER/REAL/BLOB/NUMERIC
INTEGER PRIMARY KEY AUTOINCREMENT自增主键支持
NOT NULL/UNIQUE/DEFAULT/CHECK不支持外键默认关闭,需要
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,转载请注明出处。
原文链接
欢迎访问