导出单张表的INSERT语句需右键具体表名(如users、orders),选“Export data”而非“Generate SQL”或“Export database”;若导出结果集,须先执行带WHERE的SELECT查询,再在结果表格区域右键选“Export resultset”,并勾选“Insert statements”、启用“Quote identifiers”防关键字冲突。

导出单张表的 INSERT 语句,右键位置别点错
导出 INSERT 的前提是「选中一张具体表」,不是数据库节点、不是 schema 节点,而是展开后那个带图标的 users、orders 这样的表名。右键菜单里只有两个关键选项:Export data(导出数据)和 Generate SQL(生成 SQL)。前者才是导出 INSERT 语句的正路,后者只生成模板语句(如 INSERT INTO users (...) VALUES (...)),不带真实数据。
常见错误是点到 Export database ——那会进全库导出向导,参数多、易漏配,且默认不导数据;或者点到表上却没执行「刷新」,导致右键无 Export data 选项(DBeaver 有时缓存状态,F5 刷新一下再试)。
导出带 WHERE 条件的数据,必须先执行查询
想导出“最近 30 天活跃用户”,不能靠导出后再删行。正确路径是:在 SQL 编辑器里写好 SELECT * FROM users WHERE last_login > CURRENT_DATE - 30,然后按 Ctrl+Enter 执行——让结果真正在下方表格里显示出来。这时右键表格空白处,才有 Export resultset 选项。
容易被忽略的细节:
-
Export resultset不在表右键菜单里,而在「结果表格区域」右键 - 导出格式选
SQL,Data transfer settings 里务必勾选Insert statements,取消勾选Create table - 如果字段名含
order、group等关键字,要打开Quote identifiers,否则生成的INSERT INTO order...会语法报错
批量导出 100+ 张表的 INSERT,全选表后走导出向导
面对上百张表,手动一张张导出不可行。可行做法是:在数据库连接下展开 schema,用 Ctrl+A 全选所有表(注意不是 Ctrl+Click 单点,那样容易漏),然后右键 → Export data → 格式选 SQL → 在 Data transfer settings 中确认启用 Insert statements。
这个操作生成的是纯数据 INSERT 语句,不含 CREATE TABLE。若需要完整备份,得额外做两件事:
- 单独导出 DDL:全选表 → 右键 →
Generate SQL→DDL→ 勾选Show comments - 合并文件时注意顺序:先执行 DDL 文件建表,再执行 INSERT 文件插数据;否则会报
Table not found
导出大结果集时,建议启用 Use batch insert 和 Split large scripts(比如设为 5MB/文件),避免单文件超 100MB 导致 MySQL 或 PostgreSQL 导入失败。
Oracle / DB2 等数据库导出 INSERT 报错,重点调这个参数
Oracle 默认不支持 INSERT INTO t VALUES (1,'a'),(2,'b') 这种多值语法,而 DBeaver 默认导出的就是这种格式。DB2 同样对批量 INSERT 行数敏感。解决方法是在导出向导的 Data transfer settings 页里,把 Rows per INSERT statement 改成 1(即每条 INSERT 只插一行)。
其他关键配置:
- 编码选
UTF-8,尤其含中文注释或字段值时,否则导入后变乱码 - 勾选
Use qualified names(如schema.table),避免跨 schema 导入时找不到表 - 如果导出后 INSERT 里出现
NULL字段报错,检查是否勾了Use NULL literal——有些老版本 Oracle 驱动不识别字面量NULL,得关掉改用空字符串逻辑处理
真正麻烦的不是怎么点,而是导出后能否直接执行。不同数据库对 INSERT 语法容忍度差异极大,同一份 SQL 在 MySQL 跑得欢,在 Oracle 上可能连第一行都过不去——所以导出前务必确认目标库类型,别等导入失败才回头调参数。


















