SQLite 创建表(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在数据库开发领域,SQLite 以轻量、高效和易于集成的特点,成为许多开发者入门和小型项目中的首选工具。而“SQLite 创建表”作为数据库操作的基础技能,是理解数据存储逻辑和关系模型的关键一步。无论是构建个人项目还是企业级应用,掌握如何通过 SQL 语句定义表结构,是高效管理数据的第一步。本文将通过通俗易懂的讲解和实战案例,帮助读者系统化地掌握 SQLite 创建表的核心知识点。
数据库与表的类比:从图书馆到数据世界
为了更直观地理解数据库和表的关系,我们可以将其想象成一个“数字化的图书馆”:
- 数据库如同整个图书馆,是存储所有数据的容器。
- 表则像图书馆中的书架,每个书架(表)存放着同一类书籍(数据记录)。
- 字段是每本书的属性,如书名、作者、ISBN 等,对应表中的列(Column)。
在 SQLite 中,创建表的过程,就是设计书架的结构——定义每本书需要记录哪些属性,以及这些属性的规则(例如“ISBN 必须唯一”)。
SQLite 创建表的基础语法
SQLite 使用 CREATE TABLE
语句来定义表结构。其基本语法如下:
CREATE TABLE 表名 (
列名1 数据类型 列约束条件,
列名2 数据类型 列约束条件,
...
表约束条件
);
关键概念解析
- 表名:需遵循命名规范(如不包含空格或特殊字符),建议使用下划线分隔(如
user_info
)。 - 列名与数据类型:
- 数据类型:SQLite 支持
INTEGER
(整数)、TEXT
(文本)、REAL
(浮点数)、BLOB
(二进制数据)等基础类型。 - 特殊规则:SQLite 的类型系统采用“无类型”(Typeless)设计,实际存储依赖于值的类型,但建议仍按业务需求指定类型以增强可读性。
- 数据类型:SQLite 支持
示例:创建一个简单的用户表
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
);
- id 列被定义为
INTEGER PRIMARY KEY
,表示它是主键(唯一标识每条记录)。 - name 列使用
NOT NULL
约束,强制记录必须包含姓名。 - email 列添加了
UNIQUE
约束,确保邮箱地址在表中唯一。
数据类型与约束条件详解
1. 常见数据类型及其适用场景
数据类型 | 描述 | 典型用途 |
---|---|---|
INTEGER | 整数类型,适合存储年龄、计数等 | 用户年龄、商品库存 |
TEXT | 文本类型,存储字符串 | 用户名、地址、备注信息 |
REAL | 浮点数类型,用于精确小数 | 商品价格、测量值 |
BLOB | 二进制数据,如图片或文件的原始数据 | 存储用户头像、附件文件 |
BOOLEAN | SQLite 不直接支持,通常用 INTEGER (0/1)表示 | 是否启用、开关状态 |
2. 列约束条件:为数据添加规则
约束条件确保数据的完整性和一致性,常见的约束包括:
- PRIMARY KEY:主键,唯一标识一条记录。
- NOT NULL:字段值不能为空。
- UNIQUE:字段值在表中唯一。
- DEFAULT:指定默认值,当插入记录时若未提供值则自动填充。
- CHECK:定义值的条件限制(如
age CHECK(age >= 0)
)。
示例:添加默认值和检查约束
CREATE TABLE products (
id INTEGER PRIMARY KEY,
product_name TEXT NOT NULL,
price REAL DEFAULT 0.0,
stock INTEGER CHECK(stock >= 0)
);
表约束条件:主键、外键与索引
1. 主键(PRIMARY KEY)
主键是表中唯一且非空的标识符。SQLite 支持两种主键定义方式:
- 显式指定:
id INTEGER PRIMARY KEY
- 隐式自增:若主键为
INTEGER
类型且未显式赋值,SQLite 会自动分配递增的唯一值。
2. 外键(FOREIGN KEY)
外键用于建立表与表之间的关联。例如,订单表(orders
)可引用用户表(users
)的 id
:
CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
user_id INTEGER,
product TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
3. 索引(INDEX)
索引能加速数据检索,但会占用额外存储空间。通过 CREATE INDEX
语句添加索引:
CREATE INDEX idx_email ON users(email);
实战案例:创建电商订单表
假设我们要设计一个电商系统的订单表,包含以下需求:
- 订单号唯一且自动生成
- 用户ID关联用户表
- 商品名称和数量字段
- 创建时间默认为当前时间
CREATE TABLE orders (
order_id TEXT PRIMARY KEY,
user_id INTEGER NOT NULL,
product_name TEXT NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
created_at TEXT DEFAULT (DATETIME('now')),
FOREIGN KEY (user_id) REFERENCES users(id)
);
关键点解析
- order_id 使用
TEXT
类型,可通过业务逻辑生成唯一字符串(如ORD_20231015_001
)。 - created_at 的默认值使用 SQLite 的
DATETIME('now')
函数,自动记录当前时间。
常见问题与最佳实践
1. 如何修改已存在的表结构?
使用 ALTER TABLE
语句添加或删除列:
-- 添加列
ALTER TABLE users ADD COLUMN phone TEXT;
-- 删除列(SQLite 不直接支持,需通过备份表重建)
2. 如何避免重复创建表?
在脚本中添加条件判断:
CREATE TABLE IF NOT EXISTS users (...);
3. 数据库设计的“黄金法则”
- 原子性:每个字段存储单一信息(如避免将“姓名+年龄”存入同一列)。
- 规范命名:使用下划线分隔的英文小写(如
user_address
)。 - 适度约束:根据业务需求选择约束条件,避免过度限制。
结论
通过本文的学习,读者已掌握了 SQLite 创建表的核心语法、数据类型、约束条件及实战案例。从定义表结构到设置主键、外键和索引,这些技能是构建可靠数据存储的基础。建议读者通过实际操作(如使用 SQLite 命令行工具或集成到 Python/Java 等编程语言)进一步巩固知识。记住,优秀的数据库设计如同一座稳固的桥梁,它连接着代码逻辑与真实世界的数据需求,而“SQLite 创建表”正是这座桥梁的基石。
希望这篇文章能帮助开发者们在 SQLite 的世界中迈出坚实的第一步!