1、创建数据库
点击数据库->添加数据库,选择文件或者输入一个新文件及名称:

2、创建表

2.1 表的基本概念解释
约束解释:
| 约束选项 | 作用说明 |
|---|---|
| 主键 | 用来唯一标识表中的每一行数据,一个表最多只能有 1 个主键(可以是单个字段,也可以是多个字段组合的 "复合主键")。特点:值不能重复、不能为 NULL,通常用于关联其他表(作为外键的关联对象)。 |
| 外键 | 用来关联其他表的主键,保证数据的 "参照完整性"(比如订单表的user_id关联用户表的id,避免出现不存在的用户 ID)。注意:SQLite 默认不自动开启外键约束,需手动开启(可在 SQLiteStudio 的 "设置 - 数据库" 中勾选 "启用外键")。 |
| 唯一 | 保证该字段的值在整个表中不能重复,但可以为 NULL(一个表可以有多个 "唯一" 约束)。例:用户表的email字段设为 "唯一",避免注册重复邮箱。 |
| 条件 | 自定义 "检查约束",限制字段的取值范围(比如age > 0 AND age < 150)。例:学生表的score字段设为score BETWEEN 0 AND 100,避免出现负数或超过 100 的分数。 |
| 非空 | 保证该字段的值不能为 NULL(必须填写),避免数据缺失。例:用户表的username字段设为 "非空",确保每个用户都有用户名。 |
| 字符序 | 针对 TEXT 类型字段,指定字符串的排序 / 比较规则(比如区分大小写、使用哪种语言的排序方式)。默认使用数据库的字符序,特殊场景(如多语言数据)才需要自定义。 |
| 生成的值 | 让字段的值自动生成(比如自增 ID、默认时间戳)。常见场景:主键字段设为 "INTEGER + 生成的值(自增)",插入数据时无需手动填写 ID,系统自动递增。 |
| 默认 | 为字段设置 "默认值",当插入数据时未填写该字段,自动使用默认值。例:订单表的status字段设为默认值0(代表 "待支付"),插入订单时若不填status,自动填充为 0。 |
类型解释:
| 类型选项 | 作用说明 |
|---|---|
TEXT |
存储字符串(如文本、字符),长度不限(比如用户名、描述)。 |
BLOB |
存储二进制数据(如图片、文件),以原始字节形式保存。 |
INTEGER |
存储整数(可正可负),支持不同长度(如INT、BIGINT),常用作自增主键。 |
NUMERIC |
存储数值(整数、小数、日期时间等),会自动处理数值精度(比如金额、分数)。 |
REAL |
存储浮点数(小数),但精度不如NUMERIC(通常用于非精确计算场景)。 |
触发器:
预先定义的 "自动执行的操作",当表发生特定事件(如插入、更新、删除数据)时,触发器会自动触发执行对应的 SQL 语句。举例:若给students表建一个触发器,设置 "当插入新学生时,自动记录操作日志到log表",那么每次插入数据,日志会自动生成,无需手动写代码。
索引:
数据库中用于加速数据查询的结构(类似书籍的目录)。
DDL:
DDL 是 "数据定义语言(Data Definition Language)" 的缩写,用来定义数据库结构的 SQL 语句(比如创建表、修改表、创建索引等)。
2.2 界面操作创建表
右键点击表,选择创建表,填写表名称后新增列:

在students中添加name列:

依次添加age和score列,其中score添加条件1-100:

点击创建后会提示生成该表的数据库语句,确定即可:

依次添加以下内容,其中name主键重复或者score超过条件约束会报错:

2.3 sql语句创建表
也可以直接用sql语句创建表,创建一个log表:

2.4 触发器测试
添加触发器,在新增学生数据的时候将信息打印的log表中:

新增学生数据后log表显示:

3、常用sql语句
3.1 创建
-- 创建学生表,name为主键(唯一+非空),score约束1-100
CREATE TABLE IF NOT EXISTS students (
name TEXT (16) PRIMARY KEY NOT NULL, -- 姓名(主键,最多16字符)
age INTEGER NOT NULL, -- 年龄(非空)
score INTEGER NOT NULL CHECK (score BETWEEN 1 AND 100) -- 分数(1-100)
);
3.2 增
单条:
INSERT INTO students (name, age, score)
VALUES ('张三', 18, 95);
多条:
INSERT INTO students (name, age, score)
VALUES
('李四', 17, 88),
('王五', 16, 92),
('赵六', 19, 76);
3.3 删
按主键:
-- 删除姓名为"赵六"的学生(主键唯一,只删1条)
DELETE FROM students WHERE name = '赵六';
按条件:
-- 删除年龄大于18且分数小于80的学生
DELETE FROM students WHERE age > 18 AND score < 80;
-- 删除分数等于100的所有学生
DELETE FROM students WHERE score = 100;
3.4 改
修改单条数据单个字段:
-- 把"李四"的分数改成90
UPDATE students
SET score = 90
WHERE name = '李四'; -- 按主键定位,只改1条
修改单条数据多个字段:
-- 把"王五"的年龄改成17,分数改成95
UPDATE students
SET age = 17, score = 95
WHERE name = '王五';
3.5 查
查询所有:
-- 查询所有学生的所有字段
SELECT * FROM students;
指定字段:
-- 查询所有学生的姓名和分数(不看年龄)
SELECT name, score FROM students;
条件查询:
-- 1. 查询分数大于90的学生
SELECT * FROM students WHERE score > 90;
-- 2. 查询年龄在16-18之间的学生
SELECT name, age FROM students WHERE age BETWEEN 16 AND 18;
-- 3. 查询分数等于95或88的学生
SELECT * FROM students WHERE score IN (88, 95);
-- 4. 查询姓名包含"张"字的学生(模糊查询)
SELECT * FROM students WHERE name LIKE '%张%';
顺序查询:
-- 按分数降序排列(从高到低),分数相同按年龄升序
SELECT * FROM students ORDER BY score DESC, age ASC;
-- 按年龄升序排列(从低到高)
SELECT name, age FROM students ORDER BY age;