Skip to content

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高级语法

理论上都是支持的,但这里面向新人,可自行查询并学习。

ST《数据库》教程