1. 先把选型和授权说清楚:Navicat 管 SQL Server 到底合不合适
1.1 Navicat 在这个组合里干的活
Navicat 和 SQL Server 这一对组合,在国内的开发、运维和数据分析圈子里出现频率非常高。原因很简单:SQL Server 自带的管理工具 SSMS(SQL Server Management Studio)功能足够强,但它的定位是"面向 DBA 的重型工具",装一次几百兆到几个 G,启动慢,界面偏工程化;而 Navicat 的定位是"轻量、跨库、顺手",一个客户端能同时挂 MySQL、PostgreSQL、Oracle、SQLite、SQL Server 好几类连接,切来切去不用重开窗口。
这就决定了它的典型使用场景:你手上不止一个数据库,或者你主要工作是写 SQL、查数据、导表格,而不是天天做备份策略和性能调优;再或者你需要经常把结果集导出成 Excel、CSV 交给业务方。这些活 Navicat 干得又快又舒服。反过来,如果你要做的是索引碎片整理、执行计划深度分析、Always On 高可用配置,那还是老老实实回 SSMS,那边才是主战场。
需要先说清楚的是,Navicat 在连接 SQL Server 的时候,底层并不是自己造了一个协议栈,绝大多数情况是通过微软提供的驱动(早期是 SQL Server Native Client,后来是 ODBC Driver 17/18)跟数据库对话。这一点非常关键,因为后面你遇到的连接报错,十有八九不是 Navicat 本身的锅,而是驱动层面的默认参数在作妖。理解了这个前提,排查问题时你才知道该往哪个方向看。
1.2 版本与授权:别把时间浪费在歪路上
网上关于这款软件的搜索结果里,混杂着大量来路不明的安装包和所谓"密钥、注册码、破解补丁",这里我明确建议不要碰,原因有三点,都是实打实的经验。
第一是安全。第三方打包的安装程序里塞后门、挖矿程序、凭据窃取模块的案例太多了,尤其是数据库客户端这类工具,它手里握着你所有生产库的连接串和密码,一旦被动手脚,损失不是几台机器的事,是整条数据链。第二是稳定性,被改过校验逻辑的程序在高版本系统上容易出现各种诡异崩溃,你写 SQL 写到一半闪退,那滋味很难受。第三是合规,公司内网环境里跑非授权软件,被审计出来是要担责的。
那正经的路子有哪些?官方对这款软件提供 14 天全功能试用,足够你把一个项目跑通;另外官方推出了免费的 Lite 版本(Navicat Premium Lite),功能做了裁剪,日常的建连、查询、表设计、数据查看都能用,只是数据传输、数据同步、自动化任务这些批量功能不开放,个人学习和小型项目完全够。预算允许的话,直接买正版订阅或者永久授权,按月或按年摊下来,比你在各种资源站反复折腾安装包省心得多。我自己的习惯是:学习机装免费版,工作机装正版,两边操作逻辑一致,不会因为环境差异产生误判。
1.3 和其它客户端横向对比
选工具这件事不该拍脑袋,我把几个常见选项按实际使用感受列个表,你可以对着自己的场景挑。
| 工具 | 优势 | 短板 | 适合谁 |
|---|---|---|---|
| Navicat Premium | 跨库统一体验,数据传输/同步强,导出顺手 | 商业授权,批量功能需付费版 | 多库并存、以查询和导出为主的开发者 |
| SSMS | 官方全功能,执行计划、Profiler、Agent 齐全 | 启动慢,只服务 SQL Server | DBA、性能调优、运维 |
| Azure Data Studio | 轻量、跨平台、笔记本式查询 | 少了些管理功能,中文资料偏少 | Mac/Linux 上用 SQL Server 的人 |
| DBeaver | 开源免费,驱动生态广 | 大数据量下界面响应偏慢 | 预算敏感、愿意折腾配置的人 |
从表里能看出来,Navicat 的位置其实很清晰:它不是要替代 SSMS,而是补上"日常高频轻操作"这块短板。我在实际项目里的分工就是这样,写查询、拉数据、给业务导表用 Navicat,改索引、看执行计划、配作业用 SSMS,各干各的活,效率最高。你不用非得二选一。
2. 连接之前,SQL Server 这边要先做好的四件事
2.1 装哪个版本、装成什么形态的实例
很多人连接失败,根子其实不在 Navicat,而是在装 SQL Server 的时候就没配对。先把版本理一理:SQL Server 目前常见的有 2016、2017、2019、2022 几个大版本。生产环境建议 2019 或 2022,安全补丁和维护周期都还在;老系统里跑 2008 R2 的也不少,能用但要知道它已经停止支持,只适合封闭内网。个人学习和测试,直接装 2022 的 Express 版本或者 Developer 版本——Developer 版功能和企业版一致,只是授权上限定不能用于生产,拿来练手是最优解。安装包从微软官方渠道下,别去网盘找"某某整合版"。
安装时有个必选项要留心:实例类型。默认实例只有一个,服务名是MSSQLSERVER,装完之后用localhost或者.就能连,端口默认 1433。命名实例可以在一台机器上装好几个,比如SQLEXPRESS、DEV01,服务名是SQL Server (SQLEXPRESS)这种格式,连接时必须写机器名\实例名,比如DESKTOP-ABC\SQLEXPRESS,或者固定端口后用127.0.0.1,端口号连。
Express 版默认装出来就是命名实例SQLEXPRESS,这是新手最容易踩的坑:明明服务在跑,Navicat 里填localhost死活连不上,就是因为实例名没写。装完第一件事,打开 SQL Server 配置管理器,在"SQL Server 服务"节点里看一眼真实的实例名,这个信息记下来,后面新建连接直接用。
2.2 启用 TCP/IP 并锁定端口
SQL Server 默认安装完,TCP/IP 协议在很多版本里是"已禁用"状态,尤其是 Express 版本。它默认只开着共享内存协议,本机的 SSMS 能连,但走网络的客户端(包括 Navicat 用 TCP 方式)就连不上。
操作路径是:开始菜单搜"SQL Server 配置管理器",展开"SQL Server 网络配置",找到你的实例对应的"XX 实例的协议",右侧会看到 Shared Memory、Named Pipes、TCP/IP 三个。Shared Memory 默认启用,TCP/IP 默认禁用。
选中 TCP/IP,右键属性,切到"IP 地址"选项卡。这里会列出 IP1、IP2……直到 IPAll。前面那些是给具体网卡绑端口的,一般不用管;重点看最下面的 IPAll 区域。如果你希望用固定端口,就把"TCP 动态端口"清空,在"TCP 端口"里填 1433;如果让它自动分配,就把两个都留空,让它动态走,然后通过 SQL Server Browser 服务(UDP 1434)来告诉客户端实际端口。我的建议是:本地开发环境直接固定 1433,省去一堆麻烦;生产环境如果一台机器上有多个实例,才考虑用动态端口 + Browser 服务的方案。
改完之后一定要重启服务才生效,注意是重启"SQL Server (实例名)"这个服务,不是重启 Navicat。重启完用一条命令验证一下端口是不是真的在监听:
netstat -ano | findstr :1433看到类似TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING这样的输出,说明端口起来了。如果只看到127.0.0.1:1433而没有0.0.0.0,说明只监听了本机回环地址,远程还是连不上,这时候要回去检查 IP 地址选项卡里有没有把对应网卡的"活动"和"已启用"勾上。
2.3 改成混合验证模式并启用一个专用账号
SQL Server 有两种身份验证方式:仅 Windows 身份验证、SQL Server 和 Windows 身份验证混合模式。默认安装时,很多向导页选的是"仅 Windows 身份验证",这种模式下你用用户名密码是永远登不进去的,会一直报 18456。
改法有两种。第一种是用 SSMS 以 Windows 身份登录进去,右键服务器根节点 → 属性 → 安全性,把服务器身份验证改成"SQL Server 和 Windows 身份验证模式",确定后重启 SQL Server 服务。第二种是直接写注册表,但我不推荐,改配置这种事绕开官方界面容易留下隐患。
改完之后还要启用登录名。默认的sa账号是禁用的,右键"安全性 → 登录名 → sa",先在"常规"页设一个足够复杂的密码,再切到"状态"页,把"登录"改成"已启用",确定。如果你的环境对密码策略有要求,可以勾选"强制实施密码策略",让它校验复杂度;本地练习图方便的话也可以取消勾选,但别在生产环境这么干。
顺便说个我的习惯:生产环境从来不直接用 sa 连业务库。给每个项目建一个独立的登录名,只授权它需要的那几个库和表,权限用最小化原则。这样万一某个应用的连接串泄露了,影响面是可控的。sa 只在初始化阶段用一次,用完就禁用。
验证配置是否生效,可以直接在查询窗口跑一段 T-SQL:
SELECT @@VERSION AS 版本, SERVERPROPERTY('InstanceName') AS 实例名, SERVERPROPERTY('IsIntegratedSecurityOnly') AS 仅Windows验证;IsIntegratedSecurityOnly返回 1 表示当前还是仅 Windows 验证模式,返回 0 才是混合模式,可以正常用账号密码登录。
2.4 防火墙放行与连通性自检
前面三步都对了,还是连不上,八成就是防火墙。Windows 防火墙默认会拦掉入站的 1433 端口,本机测试可能不受影响,但一换到局域网另一台机器就失败。
用管理员权限打开 PowerShell,一条命令搞定:
New-NetFirewallRule -DisplayName "SQL Server 1433" ` -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow习惯用 cmd 的话,等价写法是:
netsh advfirewall firewall add rule name="SQLServer1433" dir=in action=allow protocol=TCP localport=1433注意一点:如果你的实例用的是动态端口,除了主端口,还要给 SQL Server Browser 服务放行 UDP 1434,否则客户端解析不出实际端口。另外很多安全软件(比如某些终端防护套件)会额外拦一道,加完系统防火墙规则还连不上,就把防护软件临时关掉试一次,能连就是它在拦。
连通性自检我一般分两步:先在 Navicat 所在机器上用telnet 目标IP 1433或者 PowerShell 的Test-NetConnection 目标IP -Port 1433试端口通不通,这一步通了再看账号密码问题,不通就回服务器查监听和防火墙。把"网络层"和"认证层"分开排查,能省下大量瞎试的时间。
3. Navicat 侧新建连接:每个字段都掰开揉碎
3.1 连接窗口的字段与填写规则
打开 Navicat,点"连接" → 选"SQL Server",弹出的窗口里字段不算多,但每一个都有讲究。
| 字段 | 填写规则 | 常见错误 |
|---|---|---|
| 连接名 | 自定义,建议带环境标识 | 写成"test"后面自己都分不清 |
| 主机 | IP 或 机器名,命名实例写在斜杠后 | 命名实例只填 localhost |
| 端口 | 固定端口填 1433,动态端口留空 | 填了端口却和实际不一致 |
| 身份验证 | SQL Server 身份验证 / Windows 身份验证 | 模式选反 |
| 用户名 | sa 或专用账号 | 用了没启用的账号 |
| 密码 | 对应账号密码 | 密码里有特殊符号被截断 |
| 初始数据库 | 可留空,登录后手动切 | 填了不存在的库名导致连接失败 |
命名实例的写法是最容易出问题的地方。正确格式是主机名\实例名,比如192.168.1.50\SQLEXPRESS。如果你希望走 IP 加端口的方式,就写成主机填192.168.1.50、端口填实际端口,不要在下拉框里选实例名那一栏。两种方式选一种,别混着写,混着写必然报错。
连接名我建议养成命名习惯:公司-测试-SQL2019、本地-SQLEXPRESS这种,一眼能看出环境和用途。等你有二十个连接的时候,就知道这个习惯有多值钱了。
3.2 连接测试与报错一一对应
填完点"测试连接",成功就完事,失败的话报错信息其实很有信息量,关键看括号里那串错误码。
[08001] [Microsoft][ODBC Driver 18 for SQL Server]命名管道提供程序: 无法打开这个报错,翻译成人话是:客户端按命名管道方式去连,没找到目标。原因通常是实例名写错、TCP/IP 没启用、服务没启动这三者之一。先确认服务在跑,再确认协议开了,最后确认实例名,按这个顺序排。
错误 40 - 无法打开到 SQL Server 的连接和错误 26 - 定位指定的服务器/实例时出错是亲兄弟,前者偏网络层,后者偏实例解析层。错误 26 如果是命名实例,几乎可以断定是 SQL Server Browser 服务没启动,去服务列表里把SQL Server Browser设成自动启动。
用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接进行关联。(Microsoft SQL Server, 错误: 18456)这种,直接回第 2.3 节检查验证模式和账号状态,两者必有一个没弄对。
还有一个近两年非常高发的报错:SSL Provider: 证书链是由不受信任的颁发机构颁发的。这是 ODBC Driver 18 的默认行为变了——它默认强制加密连接,而开发机上的 SQL Server 用的自签名证书自然不被信任。解法是在 Navicat 连接属性的"高级"选项卡里,把加密选项调成可选,或者勾选"信任服务器证书",再或者在 ODBC 附加参数里追加TrustServerCertificate=Yes;Encrypt=Optional。这个坑不解决,很多人会在"密码明明是对的"这件事上怀疑人生很久。
3.3 高级选项卡:加密、超时、SSH 隧道
"高级"这个选项卡平时不用动,但有几个开关值得知道。
保持连接间隔:默认可能不开,如果你连的是云上的数据库,中间隔了负载均衡,空闲几分钟连接就会被掐断,表现为"过一会儿点表就报连接已断开"。把保持连接间隔设成 60 秒左右,客户端会定期发心跳,基本能解决。
连接超时:局域网设 10 秒够了,跨公网建议 30 秒往上,别设太小,否则网络稍微抖一下测试连接就失败,误导判断。
限制连接数:单机自用不用管;如果多人共用同一套连接配置,或者程序化调用,把它设成 2 到 5,避免一次打开几十个会话把数据库的连接数吃满。
SSH 隧道和 SSL 这两个是给远程场景用的。SSH 选项卡的原理是先连跳板机的 SSH,再从跳板机转发到数据库端口,适合数据库只对内网开放、你需要在外面维护的情况,但要注意跳板机的账号权限要收好,别用 root 直连。SSL 选项卡就是前面说的加密相关,走公网的话建议开启,配套装好服务端证书;纯内网自用关掉更省事。
4. 常用功能实操:从建库建表到数据搬运
4.1 查询编辑器:写 T-SQL 的手感调优
连接建好之后,最常用的就是左上角的"查询" → "新建查询"。这个编辑器的几个设置值得花五分钟调一下,之后每天都能省时间。
首先是自动完成。在"工具 → 选项 → 编辑器"里,把代码自动完成打开,补全延迟调到 100 毫秒左右。SQL Server 的对象名前缀比较长(dbo.、sys.),有补全能少敲很多。
其次是执行方式。Navicat 的执行按钮有两个语义:一个是执行全部语句(快捷键 Ctrl+R),一个是执行当前选中的语句(Ctrl+Shift+R)。我强烈建议养成"选中再执行"的习惯,尤其是脚本里有DELETE、UPDATE的时候。这个习惯救过我很多次,因为有时候鼠标点错位置,光标停在哪就执行哪,全脚本跑一遍是灾难。
第三是结果集的处理。查询出来的结果默认在一个网格里显示,几千行还行,上百万行就会卡。这种情况我会改用"导出"功能直接落成文件,而不是在网格里滚动。另外"工具 → 选项 → 记录"里可以设置单次查询最大返回行数,默认可能是 1000,很多人以为是数据少了,其实是这个限制在起作用,需要看全量数据时把它调大或者清空。
顺手把 SQL Server 里最常用的时间函数过一遍,写报表的时候天天用:
SELECT GETDATE() AS 当前时间, SYSDATETIME() AS 高精度当前时间, DATEADD(DAY, -7, GETDATE()) AS 七天前, DATEDIFF(DAY, '2024-01-01', GETDATE()) AS 相差天数, CONVERT(VARCHAR(19), GETDATE(), 120) AS 标准格式, FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss') AS 自定义格式, DATEPART(HOUR, GETDATE()) AS 当前小时, EOMONTH(GETDATE()) AS 本月最后一天;CONVERT的第三个参数是样式码,120 是yyyy-mm-dd hh:mi:ss,112 是yyyymmdd,这两个用得最多。FORMAT更直观但性能比CONVERT差不少,大数据量报表里别在WHERE条件中用FORMAT,会让索引失效。
4.2 三兄弟:数据传输、数据同步、结构同步
这三个功能是 Navicat 区别于轻量客户端的核心价值,但很多人分不清它们各自干什么,我先说清楚。
数据传输:把源连接里的表和数据,整体复制到目标连接。典型场景是测试库刷成生产库的副本、把本地开发数据推到测试环境。用法是右键源库 → "数据传输",选目标连接和目标库,勾选要传的表。选项里有几个关键开关:遇到错误是否继续(建议先关掉,先看错误)、是否使用事务(数据量大时开着更安全,但速度慢)、是否包括外键约束和触发器。
数据同步:源和目标两边表结构一样,只想把差异数据补齐或更新。它的工作方式是生成一系列INSERT、UPDATE、DELETE语句。这里有个重要细节,很多版本里数据同步是单向的,它会把目标端多出来的行删掉、少掉的行插进去,让目标端完全等于源端。用之前一定要看清楚界面上标的箭头方向,反了就是把生产数据往测试库里推,或者更糟。
结构同步:只对比表结构差异,生成ALTER TABLE语句,不碰数据。做版本发布的时候特别有用,可以先把测试库的结构改动同步到生产库,再单独处理数据变更。
我的使用原则是:任何一次同步或传输,操作前先对目标库做一次备份,哪怕只是导出成 SQL 文件。这三个功能威力大,但都是"改数据的操作",没有撤销键。
4.3 备份还原与计划任务
Navicat 里的备份功能,本质上是帮你执行BACKUP DATABASE语句,生成的.bak文件。这里有个关键点必须讲清楚:备份文件的路径是 SQL Server 服务所在那台机器上的路径,不是 Navicat 所在机器的路径。因为这个路径是传给数据库引擎去写的。所以如果你在 Navicat 里填了一个本地 D 盘路径,而数据库在另一台服务器上,备份会失败或者文件跑到服务器上去了,你在本地找不到,还以为丢数据了。
还原同理,选.bak文件的时候,列表出来的是服务器端能看到的文件,不是你的本地磁盘。如果.bak是从别处拷过来的,得先把它放到服务器上能被 SQL Server 服务账号读到的目录里。还有一个常见的还原报错是"无法覆盖正在使用的文件",因为.mdf/.ldf的原始路径在服务器上已经存在同名文件,这时候要在还原的"选项"里勾选"移动"文件,把物理路径改到新的目录。
计划任务这块,Navicat 自带一个自动运行功能,可以定时执行备份、查询、导出。但要注意它的运行机制:任务需要 Navicat 客户端在那台机器上保持可用状态,本质上是客户端在调度,不是数据库在调度。所以它适合个人定时导出报表这种轻量需求;真正的生产级定时备份和 ETL,还是交给 SQL Server Agent 作业更稳妥,毕竟那是引擎自带的能力,不依赖任何客户端在线。
4.4 表设计器、外键、索引和权限
表设计器是可视化改结构的入口,右键表 → "设计表"。改字段类型、加默认值、设主键都很直观,改完点保存会生成对应的ALTER语句。这里有个经验:设计器在改字段类型的时候可能触发数据转换,如果字段里已有数据且转换会丢精度(比如varchar转int),它会失败并报错,改之前先确认数据内容。所以视情况还是建议直接用 T-SQL 改,可控性更高。
外键在"外键"选项卡里配,选本表字段、目标表、目标字段、更新和删除时的行为(级联/置空/限制)。生产库里我对级联删除一直很谨慎,因为它太隐蔽了,删一行主表数据,下面几万行子表数据静悄悄没了,事后排查都很困难。习惯做法是用ON DELETE NO ACTION,删除逻辑在应用层显式处理。
索引在"索引"选项卡建。Navicat 里能建普通索引、唯一索引、聚集索引。一个实用技巧:可以通过"工具 → 查询创建工具"看出某个查询的过滤字段,据此判断该给哪一列加索引。不过索引该不该加、加几个,还是得看实际执行计划,这个后面单独说。
用户和权限这块,Navicat 对 SQL Server 的支持不如它对 MySQL 那么完整。它能看到登录名、用户、角色,也能建一些基础账号,但涉及到 schema 级权限、数据库角色成员的精细配置,还是回 SSMS 写 T-SQL 更靠谱:
-- 建一个只读账号 CREATE LOGIN app_readonly WITH PASSWORD = '一个足够复杂的密码'; USE SalesDB; CREATE USER app_readonly FOR LOGIN app_readonly; ALTER ROLE db_datareader ADD MEMBER app_readonly;这套语句比在图形界面里点来点去要清楚得多,也方便纳入版本管理。
5. 高频问题速查与避坑记录
5.1 连接类问题速查表
| 现象 | 最可能的原因 | 处理路径 |
|---|---|---|
| 命名管道提供程序无法打开 | TCP/IP 未启用或实例名错 | 配置管理器开协议,核对实例名 |
| 错误 26 定位实例失败 | SQL Server Browser 未启动 | 服务改为自动并启动 |
| 错误 40 无法打开连接 | 防火墙或服务异常 | 检查服务状态、放行端口 |
| 18456 登录失败 | 验证模式或账号状态 | 改混合模式,启用账号 |
| 证书链不受信任 | 驱动默认强制加密 | 信任服务器证书或改加密为可选 |
| 忘记密码 | 需要重置 | 用 Windows 管理员身份登入后重设 |
这张表我建议截图存在本地,下次报错直接对号入座,比你从头分析快得多。这里面的每一条我在不同项目里都遇到过,尤其是"证书链不受信任"这条,最近两年因为驱动版本更新导致出现频率极高。
5.2 功能类问题速查表
| 现象 | 原因 | 处理 |
|---|---|---|
| 删库报"数据库正在使用" | 有活动连接占用 | 切单用户模式后删除 |
| 中文显示成问号 | 字段用了 varchar 存中文 | 改用 nvarchar,字符串前加 N |
| 查询只返回 1000 行 | 客户端返回行数限制 | 工具选项里调大或清空 |
| 导出 Excel 卡死 | 数据量过大 | 分批导出或改 CSV |
| 备份文件找不到 | 路径是服务器端路径 | 去服务器上找或用共享目录 |
| 还原报文件被占用 | 同名物理文件存在 | 勾选移动并指定新路径 |
删库那个问题值得多说一句,这是搜索里经常出现的一类需求。SQL Server 删数据库失败通常不是权限问题,而是有连接正在占用。处理方式是先把数据库踢成单用户模式,把其他连接都断开,再删:
ALTER DATABASE SalesDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE SalesDB;WITH ROLLBACK IMMEDIATE的意思是立即回滚未完成的事务并断开其他连接,执行前确认没有人正在跑重要业务,否则等于强行掐断。
中文乱码的根子在于 SQL Server 里varchar是非 Unicode 类型,存中文依赖排序规则和代码页,跨版本跨系统容易出问题。建表时凡是可能存中文、人名、地址、备注这类内容,一律用nvarchar,写常量的时候前面加N,比如N'张三'。这个N很多人漏掉,漏了之后数据进去就变成问号,而且不一定立刻发现。
5.3 几个我踩过的坑
第一个坑是连接配置跟着项目走,却没有版本管理。团队里有个人改了连接参数,其他人跟着出问题。后来我们的做法是:Navicat 的连接配置只在本地维护,团队共享的配置全部走配置文件或环境变量,谁都不许直接改公共连接。
第二个坑是误用数据同步方向。有一次测试环境要刷数据,界面上的方向选反了,差点把测试库的脏数据推到生产。后来定了条死规矩:任何同步操作之前,先看一眼源和目标连接的名称,再确认一遍界面上的箭头方向,最后对目标做一次结构备份。三步做完再点执行。
第三个坑是长事务导致的锁等待。在 Navicat 里开了个事务,跑了UPDATE之后忘了提交,也没关窗口,结果其他会话全被堵住,业务那边开始报超时。现在我的习惯是:在 Navicat 里做修改类操作,先用BEGIN TRAN显式开事务,验证行数对了再COMMIT,不确认就ROLLBACK。而且做完立刻关掉那个查询窗口,不给遗忘留机会。
第四个坑是导出时的编码。导出 CSV 给业务方用 Excel 打开,中文乱码,原因是 Excel 默认按本地编码解析。解决办法是导出时选带 BOM 的 UTF-8 编码,或者在选项里直接选 GBK,看接收方的环境定。这个坑很不起眼,但每次交付数据都会遇到。
第五个坑是自动重连。网络波动导致连接断了,Navicat 默认会尝试重连,重连之后你的查询窗口上下文可能已经变了(比如当前数据库被重置回默认库)。所以执行跨库脚本的时候,我习惯在脚本开头显式写USE 目标库;,不依赖界面左上角那个数据库下拉框的状态。
这套连接和常用功能的东西讲到这里,基本能覆盖日常大部分的活。查询性能优化相关的部分其实是另一条线,比如怎么读执行计划、Profiler 怎么抓慢查询、索引该怎么配,那块单独拿出来讲才说得透,我后面会另开一篇专门聊。