SQLite 创建数据库

SQLite 创建数据库(2025 最新版)

SQLite 的核心理念

数据库 = 一个文件
打开文件 = 创建数据库

无需 CREATE DATABASE 语句!
连接时自动创建 .db 文件。


一、创建数据库的 3 种方式

方式命令说明
1. 命令行直接创建sqlite3 mydb.db最常用
2. 编程方式创建Python/Node.js 等开发中使用
3. 内存数据库:memory:临时测试

二、方式 1:命令行创建(推荐新手)

# 1. 创建并打开数据库
sqlite3 myapp.db

# 2. 自动进入 sqlite> 提示符
sqlite> .databases
seq  name         file
---  -----------  ----------------
0    main         /path/to/myapp.db

sqlite> .quit

成功! myapp.db 文件已创建在当前目录。


三、方式 2:编程方式创建(Python 示例)

import sqlite3

# 自动创建数据库文件
conn = sqlite3.connect('myapp.db')
cursor = conn.cursor()

# 创建表(可选)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE
)
''')

# 插入测试数据
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", 
               ('张三', 'zhangsan@example.com'))

conn.commit()
conn.close()

print("数据库 myapp.db 创建成功!")

运行后:当前目录生成 myapp.db 文件


四、方式 3:内存数据库(临时)

sqlite3 :memory:
conn = sqlite3.connect(':memory:')

特点

  • 速度极快
  • 程序关闭后消失
  • 适合单元测试、临时计算

五、创建数据库完整流程(推荐)

# 1. 创建数据库
sqlite3 school.db

# 2. 创建表
sqlite> CREATE TABLE students (
   ...>   id INTEGER PRIMARY KEY AUTOINCREMENT,
   ...>   name TEXT NOT NULL,
   ...>   class TEXT,
   ...>   score INTEGER
   ...> );

# 3. 插入数据
sqlite> INSERT INTO students (name, class, score) 
   ...> VALUES ('李四', '高一1班', 95);

# 4. 查询验证
sqlite> SELECT * FROM students;
1|李四|高一1班|95

# 5. 退出
sqlite> .quit

查看文件

ls -lh school.db
# -rw-r--r--  1 user  staff   3.0K Nov  4 10:30 school.db

六、数据库文件结构(内部)

组件说明
B 树页面存储表、索引
WAL 文件mydb.db-wal(写前日志)
SHM 文件mydb.db-shm(共享内存)
Journal 文件mydb.db-journal(回滚日志)

WAL 模式(推荐):

PRAGMA journal_mode = WAL;

七、常见问题与解决方案

问题原因解决
无法打开数据库文件权限不足chmod 755 mydb.db
数据库被锁定多个进程写使用 PRAGMA journal_mode=WAL;
文件太大频繁事务定期 VACUUM;
磁盘满BLOB 存储图片存文件路径,不要存二进制

八、创建数据库最佳实践

-- 1. 开启外键
PRAGMA foreign_keys = ON;

-- 2. 使用 WAL 模式(高并发)
PRAGMA journal_mode = WAL;

-- 3. 设置合理缓存
PRAGMA cache_size = -20000;  -- 20MB 缓存

-- 4. 启用严格模式(3.37+)
PRAGMA strict = ON;

-- 5. 创建表时加 DEFAULT
CREATE TABLE logs (
    id INTEGER PRIMARY KEY,
    message TEXT NOT NULL,
    created_at TEXT DEFAULT (datetime('now'))
);

保存为 init.sql

sqlite3 mydb.db < init.sql

九、创建数据库速查表

操作命令
创建文件数据库sqlite3 mydb.db
创建内存数据库sqlite3 :memory:
查看数据库路径.databases
备份数据库.backup backup.db
压缩数据库VACUUM;
删除数据库rm mydb.db

十、验证创建成功

# 方法1:命令行
sqlite3 mydb.db "SELECT name FROM sqlite_master WHERE type='table';"

# 方法2:文件存在
ls -la mydb.db

# 方法3:Python 检查
python -c "import sqlite3, os; print(os.path.getsize('mydb.db'))"

十一、GUI 工具创建数据库

工具操作
DB Browser for SQLiteFile → New Database
DBeaver右键 SQLite → Create New Connection → 选择路径
SQLiteStudioDatabase → Add Database

实战:创建学生管理系统数据库

# 1. 创建数据库
sqlite3 school.db

# 2. 执行以下 SQL
CREATE TABLE classes (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL
);

CREATE TABLE students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    class_id INTEGER,
    FOREIGN KEY(class_id) REFERENCES classes(id)
);

INSERT INTO classes (name) VALUES ('高一1班'), ('高一2班');
INSERT INTO students (name, class_id) VALUES ('王五', 1);

SELECT s.name, c.name 
FROM students s 
JOIN classes c ON s.class_id = c.id;

.quit

学习建议

  1. 永远不要用 CREATE DATABASE
  2. 数据库名建议小写 + .db 后缀
  3. 生产环境开启 WAL 模式
  4. 定期备份:cp mydb.db backup_$(date +%F).db

下一步学习? 回复:

  • 创建表 → 完整建表语法
  • 导入数据 → CSV、JSON 导入
  • Python 连接 → 完整项目模板
  • 备份恢复 → 防丢数据方案

现在就试试

sqlite3 hello.db "SELECT '数据库创建成功!';"

看到输出就成功了!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注