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 数据类型 列约束条件,  
    ...  
    表约束条件  
);  

关键概念解析

  1. 表名:需遵循命名规范(如不包含空格或特殊字符),建议使用下划线分隔(如 user_info)。
  2. 列名与数据类型
    • 数据类型:SQLite 支持 INTEGER(整数)、TEXT(文本)、REAL(浮点数)、BLOB(二进制数据)等基础类型。
    • 特殊规则:SQLite 的类型系统采用“无类型”(Typeless)设计,实际存储依赖于值的类型,但建议仍按业务需求指定类型以增强可读性。

示例:创建一个简单的用户表

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二进制数据,如图片或文件的原始数据存储用户头像、附件文件
BOOLEANSQLite 不直接支持,通常用 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 的世界中迈出坚实的第一步!

最新发布