第 06 章查询编辑器
按 ⌘T 开一个查询标签。上半部分是写 SQL 的地方,下半部分是结果。 写多条语句时,每条语句的结果是一个独立的标签。
整体布局
| # | 控件 | 作用 |
|---|---|---|
| 1 | 编辑器工具栏 | ▶ 执行跑光标所在语句(有选中就跑选中的);▶▶ 执行全部跑整个脚本;停止取消正在跑的查询;A− / A+ 临时调字号;打开 / 另存为读写 .sql 文件。 |
| 2 | 行号 | 左边缘的行号栏。可以在偏好里关掉。 |
| 3 | 当前语句背景 | 光标所在的那条语句会整段加一层淡背景,这样按「执行」之前你就知道会跑哪一段。可以在偏好里关掉。 |
| 4 | 分隔条 | 上下拖拽调整编辑器和结果区的比例,比例会被记住。 |
| 5 | 结果标签 | 每条语句一个标签。类型有结果 N(有返回行)、完成(非查询语句)、错误(失败)、只读拦截(被只读模式挡下)。超过 24 个会折叠。 |
| 6 | 状态栏 | 显示执行了几条、总耗时、总返回行数。执行中这里会变成进度,右边出现「停止」。 |
语法高亮的配色
VARCHAR、INT)也算关键字。编辑器能做什么、不能做什么
能做
- 语法高亮(关键字、函数名、类型名、字符串、反引号标识符、数字、注释、变量、操作符)
- 行号、当前语句整段高亮
- 自动缩进:换行时保持上一行的缩进
- Tab 插入 4 个空格(可在偏好里改)
- 查找(⌘F 打开系统查找条)
- 撤销 / 重做
- 注释切换(⌘/)、缩进 / 反缩进
不做
- 自动补全
- SQL 格式化 / 美化
- 多光标
- 分屏
- 表名字段的语义提示
智能引号必须关掉
在编辑器里输入 '、"、-- 时,绝不能被系统替换成弯引号
(’、“)或长破折号(—)。这是 SQL 编辑器最容易踩的坑——
一个弯引号会让整条语句语法错误,而且肉眼很难看出来。
因此系统的智能引号、智能破折号、拼写纠正在这个文本框里全部关闭。 如果你发现粘贴进去的 SQL 报语法错,先检查有没有被换成弯引号。
脚本自动保存
- 编辑内容每隔一小段时间自动存成草稿。
- App 重启后,如果偏好里开了「恢复上次脚本」,会恢复上次的编辑内容。
- 关闭查询标签不提示保存——除非这个标签是从磁盘打开过或另存过的文件,并且又有新改动。
执行
执行范围
| 操作 | 行为 |
|---|---|
| ⌘↩ | 有选中内容 → 执行选中部分;没有选中 → 执行光标所在的语句 |
| ⇧⌘↩ | 执行全部语句 |
| 工具栏「执行」右边的小箭头 | 可以把 ⌘↩ 的默认行为改成「执行全部」,设置会被记住 |
语句按分号切分。字符串里、反引号里、注释里的分号不算分隔符;最后一段即使没有分号也算一条语句;空语句和纯注释段会被跳过。
执行中的样子
出错时
- 默认行为:遇到第一个错误就停止,后面的语句不再执行。
- 可以在偏好里改成「继续执行剩余语句」,这样一次能看到所有错误——跑迁移脚本的时候更省事。
- 出错的语句在结果标签上标红。
结果展示
| 标签文字 | 含义 |
|---|---|
结果 N | 一条查询,有返回行 |
完成 | 非查询语句,显示影响行数与 last_insert_id |
错误 | 该语句失败 |
只读拦截 | 被只读模式拒绝 |
- 结果标签超过 24 个时折叠:前 23 个直接显示,其余收进一个
…下拉。 - 右键标签:
关闭/关闭其他/复制这条语句/复制结果。 - 结果网格是只读的。想改数据请到表数据视图里去改。
- 结果网格支持:本地排序(不重新查询)、调整列宽、列显隐、复制、快速查看、导出。
- 查询成功但没返回行时显示:
查询成功,0 行,耗时 3 ms。
查询历史
左侧栏底部的 查询历史 入口,点开成一个独立标签。
| 项 | 说明 |
|---|---|
| 记录范围 | 只记录从 SQL 编辑器执行的语句。表分页、元数据读取这类客户端自动发出的查询不记录 |
| 搜索 | 按 SQL 内容搜索;按连接过滤;按时间范围过滤 |
| 每条包含 | 时间、成功 / 失败、耗时、返回行数或影响行数、完整 SQL |
| 保留条数 | 默认最近 5000 条 |
| 清空 | 「清空历史」清当前连接的记录;按住 ⌥ 点击清空所有连接 |
Console Log
左侧栏底部的 Console Log 入口,同样是一个独立标签。它和查询历史的分工是:
查询历史
记录你写的语句,用来「找回上次那条 SQL」。
Console Log
记录所有发给服务器的语句,用来「搞清楚界面到底发了什么出去」。
[data] 是用户发起的,[meta] 是客户端自动发的。| 项 | 说明 |
|---|---|
| 记录范围 | 所有发给数据库的语句:元数据查询、分页查询、事务控制语句、取消查询的操作,全都在 |
| 两类标签 | [data] 用户发起的;[meta] 客户端自动发的 |
| 过滤 | 全部 / 仅数据语句 / 仅元数据 |
| 展开 | 每条可以展开看完整 SQL 与执行结果概要;失败的标红 |
| 保留条数 | 最近 5000 条,更早的自动丢弃 |
| 持久化 | 默认只在内存里,关掉 App 就没了。偏好里可以开「写入日志文件」 |
| 滚动 | 默认跟随滚动到底部;你手动往上滚以后暂停跟随,并出现「回到底部」按钮 |
脚本文件
| 操作 | 行为 |
|---|---|
| ⌘O | 打开 .sql / .txt 文件到新的查询标签 |
| ⇧⌘S | 当前脚本另存为 |
| 关闭标签 | 如果关联过文件且有未保存改动 → 提示保存;纯草稿内容不提示 |
只读模式下的查询编辑器
连接处于只读模式时,执行前会检查每条语句的类型。写操作被拒绝,工具栏上会常驻一行提示:
只读模式:仅允许 SELECT / SHOW / EXPLAIN / DESC
混合脚本里,安全的语句正常执行,被拒绝的语句有一个标红的 只读拦截 标签,
而且不会中断后面安全语句的执行。完整规则见第 9 章。
取消长查询
- 按 ⌘. 或点工具栏「停止」。
- 停止后会向数据库发送取消请求,服务器端正在跑的语句会被中止。
- 如果取消失败(例如权限不足),会提示:
取消失败,查询仍在服务器上运行。 - 已经收到的部分结果会保留展示,不会白跑。