SQLite DELETE语句返回成功但未删除数据的问题排查
可能的原因及排查方向
WHERE子句条件不匹配
这是最常见的问题:- 字段名拼写错误,比如把
user_id写成userid; - 数据类型不匹配:字符串值未加单引号(比如
WHERE name=test应该是WHERE name='test'),或者数字值错误加了引号; - 字符串值大小写/特殊字符不匹配:比如目标值是
'Test '(带尾空格),但条件写的是WHERE name='Test'; - 日期/时间格式不兼容:SQLite对日期格式有特定要求,比如
YYYY-MM-DD,如果条件里用了其他格式可能匹配不到。
- 字段名拼写错误,比如把
操作的数据库文件不一致
Bash函数中使用的数据库路径和DB Browser打开的不是同一个文件:- 如果用相对路径,Bash的当前工作目录可能和DB Browser打开文件的目录不同;
- 检查Bash里的路径,比如执行
realpath BinCexExchangeInfo.db,对比DB Browser的文件路径,确保是同一个文件。
事务未提交
如果函数中手动开启了事务(比如执行了BEGIN)但没有执行COMMIT,删除操作只会停留在内存中,不会写入磁盘。即使sqlite3返回“成功”,实际数据并未被删除。表名/数据库名大小写或拼写问题
虽然SQLite默认表名、列名大小写不敏感,但如果创建表时用双引号指定了大小写(比如CREATE TABLE "ROBOTEST" (...)),后续操作必须严格匹配大小写;另外也可能是表名拼写错误,比如实际表名是RobotTest而非ROBOTEST。可以在DB Browser中执行SELECT name FROM sqlite_master WHERE type='table';确认准确的表名。文件权限不足
运行Bash函数的用户没有数据库文件的写入权限,导致删除操作无法持久化到磁盘。可以执行ls -l BinCexExchangeInfo.db查看文件权限,确保当前用户拥有写入权限(w位)。
内容的提问来源于stack exchange,提问作者ernesto gevara
相关产品推荐
相关产品推荐

