navicat的“备份”功能不支持where条件,仅按对象粒度备份;按条件导出数据须用“导出向导”或“数据传输”,通过自定义sql实现筛选,且需注意加载全量、sql模式兼容性及use语句缺失问题。
不能直接用“备份”功能按条件备份数据——navicat 的 备份 功能只支持按对象(库/表/视图等)粒度,不接受 where 条件。真正能实现“按筛选条件导出部分数据”的路径,是用 导出向导 或 数据传输,而非 备份。
为什么“新建备份”里找不到 WHERE 输入框?
因为 备份 功能本质是调用数据库原生备份机制(如 MySQL 的 mysqldump --single-transaction),它操作的是物理/逻辑结构快照,不是查询结果集。你看到的“对象选择”只能勾选表名,不能附加 SQL 过滤条件。
常见误操作:在表数据页手动筛选后点 备份 → 结果仍是整表备份,和筛选无关。
- 筛选只是前端 UI 行为,不影响备份底层命令
-
备份生成的是.nb3加密包,不可编辑、不可条件提取 - 想保留条件逻辑?必须把筛选转成真实 SQL 查询再导出
用“导出向导”导出已筛选的记录(最常用)
适用场景:已在 Navicat 表数据页或查询结果页完成人工筛选(比如点击列头排序、输入文本过滤、用顶部筛选栏设条件),且行数可控(
操作要点:
- 确保当前标签页显示的是你想要的数据(例如:打开
orders表 → 点击顶部筛选图标 → 输入status = 'shipped'→ 点击应用 → 看到只剩发货订单) - 右键空白处或工具栏点
导出向导(不是“备份”) - 在导出确认弹窗中,明确选择 当前 x 条记录(不是“全部记录”)
- 格式选
SQL时注意:INSERT语句默认不带字段名,若目标库字段顺序不同易失败;建议勾选“导出字段名”选项 - 导出为 CSV/Excel 更适合后续分析,但会丢失时间精度(如
DATETIME(6)可能被截断)
用“数据传输”执行带 WHERE 的定制导出(推荐用于大表或自动化)
适用场景:需要稳定复用同一条件(如每天导出昨日订单)、表数据量大(>10 万行)、或要导出到另一库/文件而不只是本地 SQL。
关键步骤:
- 菜单栏点
工具 → 数据传输 - 源端选对应连接和数据库,**不要选表节点,而要点开“高级”→ 勾选“使用自定义 SQL”**
- 在弹出的 SQL 编辑框中写真实查询,例如:
SELECT * FROM orders WHERE created_at >= '2026-06-01' AND status IN ('paid', 'shipped') - 目标端选“文件”或另一个数据库;选文件时路径避免中文和空格,如
D:\export\orders_daily_20260601.sql - 点击
高级→ “记录选项”里确认勾选了“仅导出数据”,并取消“创建表”“删除表”(除非你真要重建表) - 执行后检查输出文件:开头不应有
CREATE TABLE,只有INSERT或纯数据内容
容易被忽略的三个细节
第一,导出向导 中“当前 x 条记录”依赖前端渲染缓存——如果筛选后没滚动到底部加载全量,可能只导出可见页(默认 500 行)。务必先点右下角“加载全部”或确认总数正确。
第二,用自定义 SQL 做 数据传输 时,MySQL 8.0+ 默认开启 sql_mode=STRICT_TRANS_TABLES,若源数据含空字符串插入非空字段,导出会中断;可在 SQL 前加 SET sql_mode=''; 临时放宽(仅限可信数据)。
第三,所有导出的 SQL 文件若要在其他环境执行,需手动补上 USE database_name; ——Navicat 不自动包含,否则可能插进错库。











