SQLite 常用全套 SQL 语句 + 与 MySQL/MariaDB 核心差异,整理成最实用、能直接背、能直接用的版本,覆盖日常开发 99% 场景,同时把和 MySQL 的区别讲得清清楚楚,作为笔记供参考。
一、SQLite 最常用全套 SQL 语句
1. 库操作
sql
-- 打开/创建数据库(文件形式) .open test.db -- 备份数据库 .backup test_backup.db -- 查看当前打开的库 .database
2. 表操作(最核心)
创建表
sql
CREATE TABLE user ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键 name TEXT NOT NULL, age INTEGER DEFAULT 0, email TEXT UNIQUE, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
查看所有表
sql
.tables -- 命令行 SELECT name FROM sqlite_master WHERE type='table';
查看表结构
sql
PRAGMA table_info(user);
修改表(SQLite 限制较多,记这个就够)
sql
-- 重命名表 ALTER TABLE user RENAME TO member; -- 添加字段 ALTER TABLE user ADD COLUMN phone TEXT; -- 重命名字段 ALTER TABLE user RENAME COLUMN age TO user_age;
删除表
sql
DROP TABLE user;
3. 数据增删改查
插入数据
sql
INSERT INTO user (name, age) VALUES ('张三', 20);
INSERT INTO user (name, age) VALUES ('李四', 25), ('王五', 30); -- 批量插入
查询数据
sql
SELECT * FROM user; SELECT name, age FROM user WHERE age > 20; SELECT * FROM user ORDER BY age DESC LIMIT 10; SELECT * FROM user WHERE name LIKE '%张%';
更新数据
sql
UPDATE user SET age=26 WHERE name='李四';
删除数据
sql
DELETE FROM user WHERE age < 18;
4. 高级查询
分组统计
sql
SELECT age, COUNT(*) FROM user GROUP BY age;
去重
sql
SELECT DISTINCT name FROM user;
多表连接
sql
SELECT * FROM user JOIN order ON user.id = order.user_id;
分页
sql
SELECT * FROM user LIMIT 10 OFFSET 20;
5. 索引(加速查询)
sql
-- 创建索引 CREATE INDEX idx_user_name ON user(name); -- 删除索引 DROP INDEX idx_user_name;
6. 视图
sql
CREATE VIEW v_user AS SELECT name, age FROM user;
7. 事务(保证数据安全)
sql
BEGIN; UPDATE user SET age=30 WHERE id=1; COMMIT; -- 提交 -- ROLLBACK; -- 回滚
8. 清空表数据
sql
DELETE FROM user; -- 保留结构 VACUUM; -- 优化空间
9. 常用函数
sql
SELECT COUNT(*) FROM user; -- 总数
SELECT MAX(age) FROM user; -- 最大
SELECT MIN(age) FROM user; -- 最小
SELECT AVG(age) FROM user; -- 平均
SELECT datetime('now'); -- 当前时间
二、SQLite 与 MySQL/MariaDB 核心差异
1. 数据库本质区别
- SQLite:文件型数据库,一个文件 = 一个库,无服务、无端口、无账号密码。
- MySQL:服务型数据库,需要启动服务,有账号密码、端口、权限体系。
2. 数据类型差异(最大坑点)
SQLite 只有 5 种基础类型:
- NULL
- INTEGER(整数)
- REAL(浮点数)
- TEXT(字符串)
- BLOB(二进制)
MySQL 类型非常多:
INT、VARCHAR、DATETIME、CHAR、TEXT、TINYINT、BIGINT、JSON 等
重点: SQLite 不强制校验类型,你往 INTEGER 里存字符串也能存进去! MySQL 会严格校验,类型不对直接报错。
3. 自增主键写法不同
SQLite
sql
id INTEGER PRIMARY KEY AUTOINCREMENT
MySQL
sql
id INT PRIMARY KEY AUTO_INCREMENT
4. 字符串引号不同
- SQLite:推荐单引号 ‘name’
- MySQL:单双引号都支持
5. 分页语法一样
sql
LIMIT 10 OFFSET 20
两者完全相同。
6. 表修改功能差异(非常大)
MySQL 可以随便改表:
- 修改字段类型
- 修改字段长度
- 删除字段
- 修改约束
SQLite 限制极多:
- 不能直接删除字段
- 不能直接修改字段类型
- 只能:添加字段、重命名表、重命名字段
要改结构只能重建表。
7. 布尔值
- SQLite:用 0 / 1
- MySQL:用 TRUE / FALSE
8. 时间日期
- SQLite:没有 DATETIME 类型,用 TEXT 或 REAL 存储
- MySQL:专用 DATETIME、TIMESTAMP
9. 权限与账号
- SQLite:无用户、无密码、无权限,谁拿到文件谁就能操作
- MySQL:完整权限系统,账号密码管理
10. 性能与场景
- SQLite:轻量、嵌入式、单文件、低并发 适合:APP 本地库、小程序、小工具、内网小系统
- MySQL:高并发、大数据、多用户、分布式 适合:网站后台、大型系统、生产环境
三、最简单的差异(小结)
- SQLite = 文件数据库,MySQL = 服务数据库3y4.net
- SQLite 类型少、不严格;MySQL 类型多、严格
- SQLite 不能随便改字段;MySQL 可以随便改
- SQLite 无账号无权限;MySQL 有账号有权限
- 增删改查语句 90% 通用
- 自增、时间、布尔写法略有不同