SQLite简介
- [一、SQLite 是什么?](#一、SQLite 是什么?)
- 二、它最迷人的地方:零配置、自给自足
- [四、它和 MySQL、PostgreSQL 哪里不一样?](#四、它和 MySQL、PostgreSQL 哪里不一样?)
- 五、怎么开始用?
- 六、核心概念速览
- [七、用 SQL 动手玩一下](#七、用 SQL 动手玩一下)
- [八、在 Python 里用 SQLite(选看)](#八、在 Python 里用 SQLite(选看))
一、SQLite 是什么?
你可以把它理解为一个超轻量的"文件数据库"。
我们平时用的 Excel 表格,数据存在 .xlsx 文件里。SQLite 的数据库,就全部存放在一个独立的 .db 文件中,比如 mydata.db。不同的是,Excel 靠鼠标操作,SQLite 靠一种叫 SQL 的语言来查询和管理数据。
用一句话概括:
它是一个不需要安装、不需要配置、直接把所有数据装在一个文件里的小型数据库引擎。
二、它最迷人的地方:零配置、自给自足
-
不用装服务器:像 MySQL 需要先启动一个服务,监听端口,配账号密码。SQLite 完全不用。
-
不需要 DBA:没有复杂的用户权限、主机配置。
-
跨平台即拖即用:把那个 .db 文件复制到 Windows、Mac、Linux 甚至手机上,都能直接读写,数据格式完全一致。
-
小到极致:整个库文件只有几百 KB,可以轻易嵌入到任何 App 里。
三、数据库长什么样?
想象你有一个叫 school.db 的文件,里面可以放很多张表(Table),表就像一张张 Excel 工作表:
students 表(学生信息)
| id | name | age | city |
|---|---|---|---|
| 1 | 小明 | 20 | 北京 |
| 2 | 小红 | 21 | 上海 |
| 3 | 小刚 | 22 | 广州 |
| 每一行是一条记录,每一列是一个字段。 | |||
| SQLite 用 id 这种唯一标识来区分每一行,通常设为主键(PRIMARY KEY)。 |
四、它和 MySQL、PostgreSQL 哪里不一样?
| 特性 | SQLite | MySQL / PostgreSQL |
|---|---|---|
| 架构 | 嵌入式库,和你的程序在一起 | 独立的服务器程序 |
| 访问方式 | 直接读写 .db 文件 | 通过网络(TCP/IP)连接 |
| 并发写入 | 只支持单写(锁整个库) | 支持高并发多写 |
| 数据类型 | 灵活,列不强制类型 | 严格,定义什么就存什么 |
| 使用场景 | 手机 App、桌面软件、嵌入式设备、个人小工具 | 网站后端、大型业务系统 |
简单说:SQLite 是给自己/小团队用的单机数据库;MySQL 是给多人同时访问的网络数据库。
五、怎么开始用?
-
命令行方式(几乎任何系统自带)
在终端(Mac/Linux)或命令提示符(Windows)输入:sqlite3 mydata.db
就进去了!然后你可以敲 SQL 命令了。
如果提示找不到 sqlite3,去官网下载一个可执行文件放到电脑里就行。
- 推荐图形化工具(小白首选)
不想手敲命令,可以装这些免费的图形工具:
-
DB Browser for SQLite (电脑端,界面清爽)
-
SQLiteStudio (功能很全)
-
Navicat for SQLite (更美观,但收费)
打开后,新建数据库文件,然后就能像操作 Excel 那样建表、填数据、查数据了。
六、核心概念速览
-
数据库(Database):就是那个 .db 文件。
-
表(Table):存放具体数据的结构,如学生表、成绩表。
-
行(Row)/ 记录:一条数据。
-
列(Column)/ 字段:数据的属性名,如 name。
-
SQL:用来建表、增删改查数据的标准语言。
常用数据类型:
-
NULL------空值
-
INTEGER------整数
-
REAL------小数(浮点)
-
TEXT------文字
-
BLOB------二进制文件(图片、音乐,但不建议存大文件)
SQLite 的类型比较宽松:你给定义为 INTEGER 的列塞一个 "hello" 文本,它也不会报错(除非特殊设置)。
七、用 SQL 动手玩一下
下面以命令行或图形工具的 SQL 窗口为例,建一个学生表,然后折腾数据。
-
建表
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
city TEXT
);
-
PRIMARY KEY 主键,唯一标识一行。
-
AUTOINCREMENT 让 id 自动递增,不用自己填。
-
插入数据
INSERT INTO students (name, age, city) VALUES ('小明', 20, '北京');
INSERT INTO students (name, age, city) VALUES ('小红', 21, '上海');
INSERT INTO students (name, age, city) VALUES ('小刚', 22, '广州'); -
查询
-- 查所有列、所有行
SELECT * FROM students;-- 只查名字和年龄
SELECT name, age FROM students;-- 加上条件:年龄大于20的
SELECT * FROM students WHERE age > 20;-- 按年龄倒序排列
SELECT * FROM students ORDER BY age DESC; -
更新数据
-- 把小明的城市改成深圳
UPDATE students SET city = '深圳' WHERE name = '小明'; -
删除数据
-- 删除 id 为 3 的那一行
DELETE FROM students WHERE id = 3; -
删表(慎用)
DROP TABLE students;
八、在 Python 里用 SQLite(选看)
如果你写代码,SQLite 超级方便。Python 自带了 sqlite3 模块,不需要装任何东西。
import sqlite3
# 连接数据库(没有就会自动创建)
conn = sqlite3.connect('mydata.db')
cursor = conn.cursor()
# 建表
cursor.execute('''CREATE TABLE IF NOT EXISTS students
(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# 插入
cursor.execute("INSERT INTO students (name, age) VALUES (?, ?)", ('小明', 20))
# 查询
cursor.execute("SELECT * FROM students")
print(cursor.fetchall()) # 输出所有结果
# 提交并关闭
conn.commit()
conn.close()