77 lines
2.6 KiB
Plaintext
77 lines
2.6 KiB
Plaintext
---
|
||
title: SQL 文件执行
|
||
description: 选择连接后执行 .sql 文件,查看进度,并在需要时取消后续语句。
|
||
---
|
||
|
||
SQL 文件执行用于导入或运行本地 `.sql` 脚本。它适合执行初始化脚本、数据补丁、数据库导出文件和迁移脚本。
|
||
|
||
<Callout type="warn">执行 SQL 文件可能修改大量数据或结构。运行前请确认目标连接、目标数据库和脚本来源,生产环境建议先备份。</Callout>
|
||
|
||
## 使用流程
|
||
|
||
<Steps>
|
||
<Step>
|
||
### 打开 SQL 文件执行
|
||
|
||
在 DBX 中打开 SQL 文件执行面板。
|
||
|
||
</Step>
|
||
<Step>
|
||
### 选择文件
|
||
|
||
选择本地 `.sql` 文件。大文件可能需要更长解析和执行时间。
|
||
|
||
</Step>
|
||
<Step>
|
||
### 选择目标连接
|
||
|
||
选择要执行脚本的数据库连接和数据库。
|
||
|
||
</Step>
|
||
<Step>
|
||
### 开始执行
|
||
|
||
点击执行后,DBX 会按语句执行并显示进度。
|
||
|
||
</Step>
|
||
<Step>
|
||
### 检查结果
|
||
|
||
执行结束后查看成功数量、失败语句和错误信息。
|
||
|
||
</Step>
|
||
</Steps>
|
||
|
||
## 语句分割
|
||
|
||
DBX 会按流式方式读取 SQL 文件,并尽量正确识别语句边界,避免简单按每个分号拆分:
|
||
|
||
- 字符串中的分号不会被当作语句结束
|
||
- 行注释和块注释中的分号不会被当作语句结束
|
||
- PostgreSQL 的 dollar-quoted 函数体会保持为同一条语句
|
||
- SQL Server 的 `GO` 行会被识别为批次分隔
|
||
- MySQL executable comments 会在导入前按目标连接处理:MySQL 兼容连接会展开可执行内容,非 MySQL 连接会跳过;`ENABLE/DISABLE KEYS`、`LOCK/UNLOCK TABLES`、session 状态恢复这类导入辅助指令会跳过
|
||
|
||
## 数据库覆盖范围
|
||
|
||
SQL 文件执行面向 SQL 类数据库。Redis、MongoDB 和 Elasticsearch 不执行关系型 SQL 脚本,因此 DBX 会隐藏或禁用该功能。
|
||
|
||
## 错误处理
|
||
|
||
默认情况下,执行遇到错误会停止。你也可以启用“遇错继续”,让 DBX 继续执行后续语句并记录失败数量。
|
||
|
||
## 取消执行
|
||
|
||
执行过程中可以取消任务。取消只会阻止后续语句继续执行,已经提交到数据库的语句不会自动回滚。
|
||
|
||
<Callout type="info">如果脚本需要整体原子性,建议脚本本身包含事务控制,并确认目标数据库支持相关事务语义。</Callout>
|
||
|
||
## 执行前检查
|
||
|
||
- 当前连接是否是预期环境
|
||
- 脚本是否来自可信来源
|
||
- 是否包含 `DROP`、`TRUNCATE`、大范围 `UPDATE` 或 `DELETE`
|
||
- 是否需要先在测试环境执行
|
||
- 是否需要启用“遇错继续”
|
||
- 是否需要先使用 [数据库导出](/cn/docs/database-export) 备份
|