写一条简单的查询很容易。但当它膨胀到十五个 join 和好几个别名之后,维护起来就变得枯燥乏味了。一旦重命名某个表别名,你就得手动找出每一个引用。Navicat 18 的 SQL 编辑器正是针对这类摩擦,带来了三项新增功能:重构、实时错误检测和代码洞察。
重构:重命名符号
这里的核心功能是基于重写后的 SQL 解析器构建的重命名符号。与 Navicat 18 的一些较新工具不同,这个功能完全是确定性的。它不涉及任何 AI,行为也毫无歧义。解析器足够理解你的查询结构,能够找出某个给定标识符的每一次出现,并在一次操作中安全地将它们一并更新。
假设你在针对 MySQL 的 Sakila 示例数据库(Sakila Sample Database)运行类似下面这样的查询:
SELECT c.customer_id,
c.first_name,
c.last_name,
SUM(p.amount) AS total_spend
FROM customer c
LEFT JOIN payment p ON p.customer_id = c.customer_id
GROUP BY c.customer_id
ORDER BY total_spend DESC
LIMIT 1;
如果 c 对你来说不够表意,可以将鼠标悬停在别名上,右键单击——或在 macOS 上按 Ctrl+点击——然后选择重构 -> 重命名符号...。
重命名符号后面的省略号表示它会启动一个对话框。在重命名符号对话框中,我们可以输入一个新名称。
一旦我们点击“确定”按钮,语句中 c 的每一个实例——无论是在 SELECT 列表、FROM 子句、JOIN 条件还是 GROUP BY 中——都会一并更新,因此你绝不会得到一个只改了一半、又带着语法错误的查询。这条命令同样适用于重命名对象标识符,而不只是别名。
实时错误检测
SQL 编辑器不再等你执行失败后才告诉你哪里出了问题,而是在你输入时持续检查脚本。拼写错误、对不存在的列或表的引用,以及多表查询中模糊的列名,都会立刻在行内被标记出来,而不是在你点击“运行”之后才以一条晦涩的数据库错误形式浮现。对于涉及多个 join 表的查询,仅此一项就能省去好几轮反复试错。
下面是上面那条查询,但其中一个列名写错了。如果我们把鼠标指针悬停在任意一处橙色下划线文本上,就会看到一条警告信息:
“SUM”函数也被标了红色下划线。把鼠标指针悬停在它上面,会显示一条错误信息:
这两条上下文信息都提供了通过 AI 修复的选项。顾名思义,通过 AI 修复工具会借助 AI 来纠正查询中的所有警告和错误。随后,建议的更改会在一个对话框中显示出来:
我们可以选择以下三种方式之一,将代码应用到编辑器中:
- 追加到编辑器:将代码添加到现有内容的末尾。
- 替换编辑器中的全部内容:清除现有内容,并将其整体替换为新代码。
- 替换编辑器中的所选内容(默认选项):清除所选内容,并将其替换为新代码。
代码洞察
代码洞察以三个虽小却真正实用的行为完善了这三项功能:将鼠标悬停在某个标识符上,无需离开编辑器就能显示其元数据(数据类型、是否可为空等);点击某个标识符会高亮它在脚本中所有其他被使用的地方,这对于在长查询中追踪某个列非常方便;而在表或列上按 Ctrl+点击则能直接跳转到该对象的设计器或数据编辑器。
为何能积少成多
这三项功能共同改变了日常编写 SQL 的节奏,让你少花时间手动传播重命名、少花时间在事后调试拼写错误、也少花时间在上下文切换中去查某个列的类型。对于任何在“查询编辑器”中真正投入大量时间的人来说,这些节省会迅速累积起来!

