外观
SQLite 语法入门
SQL语法介绍
⚠️ 声明
本教程仅适用于数据库 星河璀璨 3.0 版本及以上
如果你当前界面里没有【DDL】这一栏,就不是本文这套写法。
🎯 这份教程适合
- 第一次接触这套系统的人
- 只想复制粘贴,先跑通一次的人
- 不想先啃完整语法手册的人
🎯 流程
复制 → 粘贴 → 把「例子词」换成「你的词」 → 英文部分原样保留
返回目录请点击下面蓝色字体点我返回目录
🔍 结构总览
【表格名称】 ← 表叫什么名字
【表格说明Note】 ← 这张表干嘛用的+每列什么意思
【初始化Init】 ← 开始时建不建初始数据?
【新增Insert】 ← 什么时候加新行?
【更新Update】 ← 什么时候改已有行?
【删除Delete】 ← 什么时候删行?
【DDL定义】 ← 校验用的,放最后填



🎬 开始之前:先分清单行表还是多行表
行 = 表里的一条数据。
单行表 = 表里永远只有一行,记录全局状态
如:当前季节表(唯一季节)、当前章节表(唯一章节)
多行表 = 表里可以有很多行,每一行代表一个对象
如:妃嫔表(多个妃嫔)、建筑表(多个建筑)、物品表(多个物品)
有些地方写法不一样,需要区分是单行表和多行表。
📜 【名字相关】
要起两个名字:
- 中文名 = 给自己看的、填在 基本信息 和 表头 里面的
- 英文名 = 给系统用的、填在 提示词相关 里面的
英文名起名方法:
- 全部小写
- 多个词用下划线连起来
- 单词追求简单与精准,必须前后一致
⚠️ 单词使用标准「简单、易懂、常见」,一些常用词:
- 名称 = name
- 状态 = status
- 说明 = note
- 数量 = count
- 时间 = time
- 地点 = place
- 建筑 = building
- 类型 = type
🏮 例子:
- 中文名:妃嫔居住建筑表
- 英文名:woman_live
- 中文名:当前季节表
- 英文名:season
📜 【表格说明 Note】
作用:用中文告诉AI
- 这个是什么表
- 每一列的名字
- 每一列要做什么
- 有没有固定选项
📌 参考格式:
| 记录XXX。每行代表一个XXX。 列1:列名-说明 列2:列名-说明 列3:列名-说明 |
🏮 例子:
当前季节表(单行表)
| 记录当前季节信息。此表有且仅有一行。 列1:季节名称-当前是什么季节 列2:季节说明-补充说明 |
妃嫔居住建筑表(多行表)
| 记录妃嫔当前居住的建筑。每行代表一个妃嫔当前的住处。 列1:妃嫔名称-妃嫔唯一标识 列2:居住建筑-当前住在哪个宫殿或院落 列3:居住状态-只能填"已入住""空置"或"搬离" 列4:补充说明-其他备注,比如"因晋封搬入" |
⚠️ 注意:
(单行表) 必须写上「此表有且仅有一行」这句话,否则AI会擅自增加内容。
表名和列名 必须统一 !不能前面写妃嫔表,后面写娘娘表。
📜 【初始化 Init】
作用:告诉AI游戏开始时,要不要往表里放初始数据。
📌 参考格式:
单行表
| 游戏初始化时,插入固定的一行数据。 |
多行表
| 游戏初始化时,根据设定添加初始数据。比如:XXX住XXX,XXX住XXX。 |
🏮 例子:
当前季节表(单行表)
| 游戏初始化时,插入固定的一行数据。 |
妃嫔居住建筑表(多行表)
| 游戏初始化时,根据设定添加初始妃嫔居住信息。比如:皇后住景仁宫,华妃住翊坤宫。 |
⚠️ 注意:不要留空!
就算一开始不想初始化,也写清楚
不需要初始化。
📜 【新增 Insert】
作用:告诉AI什么情况下往表里加一行新数据。
📌 参考格式:
单行表
| 禁止操作。 |
多行表
| 出现未记录的XXX,且剧情里明确写出XXX时添加。 SQL示例: INSERT INTO 表名 (row_id, 列名1, 列名2) VALUES ((SELECT COALESCE(MAX(row_id), 0) + 1 FROM 表名), '值1', '值2'); |
💁 字段详细介绍:
第1段:
INSERT INTO 表名
→ 往这张表里加一行
第2段:
(row_id, 列名1, 列名2)
→ 这一行要填哪些列
第3段:
VALUES (行号生成, '值1', '值2')
→ 这些列分别填什么值
(SELECT COALESCE(MAX(row_id), 0) + 1 FROM 表名)
→ 行号自动生成
英文部分 直接复制粘贴,只需要改 表名、列名、值 这几类内容。
为了方便理解结构, 表名、列名、值 写了中文,但实际上要写英文名。
🏮 例子:
当前季节表(单行表) - 不需要新增,所以直接写
| 禁止操作。 |
妃嫔居住建筑表(多行表)
| 出现未记录的新妃嫔,且剧情里明确写出她住在哪时添加。 SQL示例: INSERT INTO woman_live (row_id, name, live, status, note) VALUES ((SELECT COALESCE(MAX(row_id), 0) + 1 FROM woman_live), '甄嬛', '碎玉轩', '已入住', '初入宫'); |
💁 字段详细介绍:
INSERT INTO woman_live
→ 往 woman_live 这张表里新增一行
(row_id, name, live, status, note)
→ 这一行要填 5 列
对应刚刚的【表格说明 Note】
列1:妃嫔名称 = name
列2:居住建筑 = live
列3:居住状态 = status
列4:补充说明 = note
VALUES ((SELECT COALESCE(MAX(row_id), 0) + 1 FROM woman_live), '甄嬛', '碎玉轩', '已入住', '初入宫')
→
行号自动生成
妃嫔名称 = name = 甄嬛
居住建筑 = live = 碎玉轩
居住状态 = status = 已入住
补充说明 = note = 初入宫
📜 【更新 Update】
作用:告诉AI什么情况下改某一行的数据。
📌 参考格式:
单行表
| 某某变化时更新。 SQL示例:UPDATE 表名 SET 列名 = '新值' WHERE row_id = 1; |
多行表
| 某某变化时更新。 SQL示例: UPDATE 表名 SET 列名 = '新值' WHERE 定位列 = '定位值'; |
💁 字段详细介绍:
第1段:
UPDATE 表名
→ 更新这张表
第2段:
SET 列名 = '新值'
→ 把哪一列更新成什么
第3段:
WHERE 定位列 = '定位值'
→ 约束AI改这一行,不要改其他行
⚠️ 注意:WHERE 非常重要
没有 WHERE,有可能把整张表所有行一起改掉。
🏮 例子:
当前季节表(单行表)
| 季节变化时更新。 SQL示例: UPDATE season SET name = '夏季', note = '天气炎热' WHERE row_id = 1; |
💁 字段详细介绍:
UPDATE season
→ 修改当前季节表
SET name = '夏季', note = '天气炎热'
→
把季节名称改成 夏季
把季节说明改成 天气炎热
⚠️ 单行表固定写:
→ WHERE row_id = 1
妃嫔居住建筑表(多行表)
| 妃嫔搬家、状态变化或备注变化时更新。 SQL示例: UPDATE woman_live SET live = '永寿宫', status = '已入住', note = '晋封后搬入' WHERE name = '甄嬛'; |
💁 字段详细介绍:
UPDATE woman_live
→ 修改 woman_live 这张表
SET live = '永寿宫', status = '已入住', note = '晋封后搬入'
→
把居住建筑改成 永寿宫
把居住状态改成 已入住
把补充说明改成 晋封后搬入
WHERE name = '甄嬛'
→ 只改 name 这一列等于「甄嬛」的那一行
⚠️ 注意:用中文逻辑来表述
AI必须先找到「甄嬛」一行后,才能修改 live、status、note 的状态
另一个例子(有人搬走了)
| UPDATE woman_live SET status = '空置', note = '原住人已搬离' WHERE name = '甄嬛'; |
→
AI必须先找到甄嬛这一行,才才能
把状态改成 空置
把备注改成 原住人已搬离
| 📜 WHERE 进阶:同时满足多个条件 有时候你想改的不是"某一列等于某个值"的那一行, 而是"同时满足几个条件"或"满足其中任一条件"的行。 🔸 AND = 同时满足 UPDATE 表名 SET 列名 = '新值' WHERE 列名1 = '值1' AND 列名2 = '值2'; → 列名1等于值1「且」列名2也等于值2,两个条件都满足才改 🏮 例子: UPDATE woman_live SET note = '因降位搬入冷宫' WHERE name = '甄嬛' AND status = '已入住'; → 找到 name 是甄嬛「且」status 是已入住的那一行才改备注 🔸 OR = 满足任一 UPDATE 表名 SET 列名 = '新值' WHERE 列名1 = '值1' OR 列名2 = '值2'; → 列名1等于值1「或」列名2等于值2,满足其中一个就改 🏮 例子: UPDATE woman_live SET status = '搬离' WHERE name = '年答应' OR name = '华妃'; → 找到 name 是年答应「或」name 是华妃的行,都把状态改成搬离 🔸 也可以用在同一列上: UPDATE woman_live SET status = '空置' WHERE live = '碎玉轩' OR live = '永寿宫'; → 居住建筑是碎玉轩「或」永寿宫的行,状态都改成空置 ⚠️ 快速记忆: AND = 且(全部都要满足) OR = 或(满足其中一个就行) |
📜 【删除 Delete】
作用:告诉AI什么情况下删掉某一整行。
📌 参考格式:
单行表
| 禁止删除。 |
多行表
| XXX彻底不再记录时删除。只是XXX不要删除,用Update。 SQL示例: DELETE FROM 表名 WHERE 定位列 = '定位值'; |
⚠️ 不想删直接写
| 禁止删除。 |
💁 字段详细介绍:
DELETE FROM 表名 WHERE 定位列 = '定位值';
第1段:
DELETE FROM 表名
→ 从这张表里删一行
第2段:
WHERE 定位列 = '定位值'
→ 只删这一行,不删别的行
⚠️ 注意:WHERE 非常重要
没有 WHERE,有可能整张表一起删掉。
🏮 例子:
当前季节表(单行表) - 原则上不删除
| 禁止删除。 |
妃嫔居住建筑表(多行表)
| 妃嫔彻底不再记录时删除。只是搬家不要删除,用Update。 SQL示例: DELETE FROM woman_live WHERE name = '年答应'; |
💁 字段详细介绍:
DELETE FROM woman_live
→ 从 woman_live 这张表里删数据
WHERE name = '年答应'
→ AI必须先找到「年答应」一行后,才能进行删除
| 📜 WHERE 进阶:同时满足多个条件 🔸 AND = 同时满足 DELETE FROM 表名 WHERE 列名1 = '值1' AND 列名2 = '值2'; → 同时满足两个条件才删 🏮 例子: DELETE FROM woman_live WHERE name = '年答应' AND status = '搬离'; → 只有「年答应」且「已经搬离」的那一行才删 🔸 OR = 满足任一 DELETE FROM 表名 WHERE 列名1 = '值1' OR 列名2 = '值2'; → 满足其中一个就删 🏮 例子: DELETE FROM woman_live WHERE name = '年答应' OR name = '华妃'; → 「年答应」或「华妃」的行都删掉 |
📜 【DDL定义】校验(再次强调格式用)
这一步是把前面用中文写的东西,翻译成系统能认的固定结构。
创建一张什么表,这张表里有哪几列,每一列是什么类型,有什么限制。
简单来说,强调格式。
📌 参考格式:
单行表
| CREATE TABLE 英文表名 ( -- 中文表名 row_id INTEGER PRIMARY KEY, -- 行号 列名1 TEXT NOT NULL, -- 中文列名1 note TEXT -- 说明 ); |
多行表
| CREATE TABLE 英文表名 ( -- 中文表名 row_id INTEGER PRIMARY KEY, -- 行号 列名1 TEXT NOT NULL, -- 中文列名1 列名2 TEXT NOT NULL, -- 中文列名2 note TEXT -- 说明 ); |
| 📜 常用列写法(简单语法介绍) 💁 字段详细介绍: CREATE TABLE 英文表名 ( -- 中文表名 → 创建一张新表 row_id INTEGER PRIMARY KEY, -- 行号 → row_id = 这一列的英文名,固定叫这个 INTEGER = 这一列填写整数 PRIMARY KEY = 这是主键,固定写法 这整行几乎每张表都可以直接抄 name TEXT NOT NULL, -- 中文列名 → TEXT = 填文字 NOT NULL = 这一列不允许空着 note TEXT, -- 中文列名 → TEXT = 填文字 没有 NOT NULL = 这一列允许留空 name UNIQUE, -- 中文列名 → UNIQUE = 不能重复 name TEXT NOT NULL CHECK(英文列名 IN ('选项1', '选项2')), -- 中文列名 → 这一列只能填「选项1」或者「选项2」 不能乱填别的词 ⚠️ 这类列要双保险 Note 里写一次允许填什么 DDL 里再用 CHECK 锁一次 count INTEGER NOT NULL DEFAULT 0, -- 数量 → count INTEGER 填写整数 NOT NULL = 不能为空 DEFAULT 0 如果没填,默认就是 0 ); → 标点符号,代表这张表定义结束 组合使用 🔸 名称列 name TEXT NOT NULL UNIQUE, -- 中文名称 🏮 例子: woman_name TEXT NOT NULL UNIQUE, -- 妃嫔名称 → 每个妃嫔只能有一行纯文字记录,而且不能重复 🔸 可填可不填的备注 name TEXT, -- 中文列名 🏮 例子: note TEXT, -- 备注 reason TEXT -- 入住原因 → 备注和原因允许留空,也可以写比如「因晋封搬入」 🔸 当前状态 status TEXT NOT NULL CHECK(英文状态 IN ('选项1', '选项2')), -- 中文状态 🏮 例子: status TEXT NOT NULL CHECK(status IN ('已入住', '空置', '搬离')), -- 居住状态 → 这一列只能填这三个词,不能填别的 🔸 数字列: count INTEGER NOT NULL DEFAULT 0, -- 数量 → count INTEGER 填写整数 NOT NULL = 不能为空 DEFAULT 0 如果没填,默认就是 0 🏮 例子: level INTEGER NOT NULL DEFAULT 0, -- 位份等级 → 填写整数,比如皇后=1、贵妃=2、妃=3,没填默认是0 🔸 是/否列: is_active TEXT NOT NULL DEFAULT '否' CHECK(is_active IN ('是', '否')), -- 是否启用 → 只能填「是」或「否」 默认是「否」 🏮 例子: is_active TEXT NOT NULL DEFAULT '是' CHECK(is_active IN ('是', '否')), -- 是否在宫 → 妃嫔是否还在宫里,默认「是」 |
🏮 例子:
当前季节表(单行表)
| CREATE TABLE season ( -- 当前季节表 row_id INTEGER PRIMARY KEY, -- 行号 name TEXT NOT NULL, -- 季节名称 note TEXT -- 季节说明 ); |
⚠️ 单行表的差别:
因为只有一行,所以通常不需要把 name 设成 UNIQUE,写了也没问题。
妃嫔居住建筑表(多行表)
| CREATE TABLE woman_live ( -- 妃嫔居住建筑表 row_id INTEGER PRIMARY KEY, -- 行号 name TEXT NOT NULL UNIQUE, -- 妃嫔名称 live TEXT NOT NULL, -- 居住建筑 status TEXT NOT NULL CHECK(status IN ('已入住', '空置', '搬离')), -- 居住状态 note TEXT -- 补充说明 ); |
⚠️ DDL最容易报错的4个地方
1)第一列不是这句
row_id INTEGER PRIMARY KEY, -- 行号
2)某一列后面没有中文注释
也就是少了:-- 中文列名
3)最后一列后面多打了一个逗号
✅️ note TEXT -- 补充说明
❌️ note TEXT, -- 补充说明
最后一列后面不要加逗号,不然会报错。
4)中文列名前后写得不一样
比如前面 Note 写:妃嫔名称
后面 DDL 却写:-- 妃嫔名字
这样很容易出问题。
😃 SQLite高级语法
理论上都是支持的,但这里面向新人,可自行查询并学习。