phpMyAdmin 默认只显示 deleted_at IS NULL 的有效记录,不自动识别软删除机制;需手动在SQL页执行 WHERE deleted_at IS NOT NULL 查询,或通过搜索功能筛选。

软删除数据在 phpMyAdmin 中默认不可见,必须手动显式查询 deleted_at 非空的记录。
为什么在数据表页看不到软删除的数据?
phpMyAdmin 默认只显示「当前有效」的行,即 WHERE deleted_at IS NULL 的结果。Laravel 的软删除机制只是把 deleted_at 字段设为时间戳,并不真正删掉记录——但 phpMyAdmin 不会主动帮你加 IS NOT NULL 条件。
常见错误现象:
• 在表数据页翻到底也找不到某条“明明删过但应该还在”的记录
• 执行 SELECT * 无结果,误以为数据丢了
- 软删除本质是逻辑标记,不是物理删除
- phpMyAdmin 不识别 Laravel 的模型配置,它只认 SQL
- 即使开启了“显示所有行”,也不会自动过滤出已软删除的行
在 SQL 标签页中查软删除数据的写法
直接在 phpMyAdmin 的「SQL」标签页运行查询即可,最简写法:
立即学习“PHP免费学习笔记(深入)”;
SELECT * FROM `users` WHERE `deleted_at` IS NOT NULL;
更实用的写法(带可读时间、排除空值干扰):
SELECT id, name, email, deleted_at FROM `users` WHERE `deleted_at` IS NOT NULL ORDER BY `deleted_at` DESC LIMIT 50;
- 务必用反引号包裹字段名和表名,避免关键字冲突(如
order表) -
deleted_at是 DATETIME 类型,不能用= ''或= '0000-00-00 00:00:00'判断(MySQL 8.0+ 默认 strict 模式下该值不合法) - 如果表用了自定义软删除字段(如
is_deleted),要换成对应字段名和条件,例如WHERE is_deleted = 1
想在浏览页快速切换查看软删除数据?
phpMyAdmin 本身不提供“软删除视图”快捷按钮,但可以利用其「自定义搜索」功能临时实现:
- 进入目标表 → 点「搜索」标签页
- 在
deleted_at字段下拉选「IS NOT NULL」 - 点「执行」,就能在结果页看到所有软删除记录,支持分页、导出、甚至勾选恢复
注意:
• 这个搜索条件不会保存,每次都要重新选
• 如果字段类型被误设为 TEXT 或 VARCHAR,「IS NOT NULL」可能不生效,得改用 != '' 或正则匹配
软删除数据恢复的关键是清空 deleted_at 值,不是重插或改 ID;而误删后能否找回,完全取决于你有没有在迁移中给 deleted_at 加索引——没加的话,大表查询会明显变慢。



















