本文小结了汇总了SQLite 的高频面试题问题包含答案和讲解,刚入门学习及应试的同学可以参考一下。
一、基础概念题
-
SQLite 是什么?有什么特点? 答:嵌入式文件型数据库,无服务、无端口、无账号密码,单文件存储,轻量小巧,支持标准 SQL,适合移动端、桌面软件、本地存储。
-
SQLite 和 MySQL 最大区别是什么? 答:SQLite 是文件型数据库,无服务进程、无权限体系;MySQL 是 C/S 架构,需要启动服务,有用户权限、高并发能力更强。
-
SQLite 支持哪些数据类型? 答:NULL、INTEGER、REAL、TEXT、BLOB 五种基本类型,采用动态类型,不强制校验类型。
-
什么是 SQLite 的动态类型? 答:字段定义的类型只是 “建议”,不是强制约束。比如 INTEGER 字段可以存字符串,MySQL 则会严格拒绝。
-
SQLite 自增主键怎么写? 答:id INTEGER PRIMARY KEY AUTOINCREMENT; 注意:不加 AUTOINCREMENT 也能自增,但不会保证 id 绝对不重复利用。
二、SQL 与使用题
- SQLite 如何查看所有表?
sql
SELECT name FROM sqlite_master WHERE type='table';
- SQLite 如何查看表结构?
sql
PRAGMA table_info(表名);
- SQLite 支持哪些 ALTER TABLE 操作? 答:只支持:
- 重命名表
- 添加字段
- 重命名字段 不支持直接删除字段、修改字段类型、修改约束。
-
想在 SQLite 中删除字段怎么办? 答:不能直接删,必须重建表:
-
创建新表
-
导入数据
-
删除旧表
-
重命名新表
-
SQLite 支持事务吗? 答:支持,且默认就是事务安全。
sql
BEGIN; 执行操作... COMMIT; 或 ROLLBACK;
-
VACUUM 命令作用? 答:清理数据库碎片、回收空间、压缩数据库文件。
-
SQLite 分页怎么写?
sql
SELECT * FROM 表 LIMIT 条数 OFFSET 偏移;
和 MySQL 一致。
- SQLite 支持索引吗? 答:支持普通索引、唯一索引、联合索引、部分索引,语法和 MySQL 基本一致。
三、高级与原理题
-
SQLite 的 WAL 模式是什么? 答:Write-Ahead Logging 预写日志模式,提高并发读写性能,替代传统回滚日志。 开启:PRAGMA journal_mode=WAL;
-
SQLite 支持高并发吗? 答:不适合超高并发。写操作会锁库,多读单写没问题,大量并发写入性能下降明显。
-
SQLite 支持存储过程、函数、触发器吗? 答:支持触发器; 不支持存储过程; 内置常用函数,不支持自定义函数(扩展除外)。
-
SQLite 支持外键吗? 答:支持,但默认关闭,需手动开启:
sql
PRAGMA foreign_keys = ON;
-
SQLite 适合做大型网站数据库吗? 答:不适合。无用户权限、并发有限、无集群、无主从复制,适合本地 / 嵌入式场景。
-
SQLite 的数据库文件是什么? 答:单个文件(.db/.sqlite),复制文件即备份,非常方便。
-
SQLite 支持 JSON 吗? 答:新版支持 JSON1 扩展,可以操作 JSON 字段,功能接近 MySQL 的 JSON 类型。
四、易踩坑对比题
-
MySQL 的 AUTO_INCREMENT 对应 SQLite 什么? 答:AUTOINCREMENT(注意拼写少一个下划线)。
-
MySQL 的 DATETIME 在 SQLite 用什么? 答:用 TEXT 或 REAL 存储,SQLite 无独立日期时间类型。
-
SQLite 有没有布尔类型? 答:没有,用 0/1 代替。
-
MySQL 可以随意修改字段,SQLite 为什么不行? 答:SQLite 架构简单,为了轻量和稳定,不支持复杂的表结构修改。
-
SQLite 有账号密码吗? 答:没有。文件本身不加密,想加密需要用 SQLCipher 扩展。3y4.net