数据库(.lnc)

观看视频分析数据 00:23

连接

连接是工作区内的一个 .lnc 文件(LightNote Connection)——可以用 Git 进行版本管理,并可在不同机器之间携带。文件夹中的连接显示在侧边栏的连接面板中 (数据库图标),每个连接都有一个状态点(绿色为已连接,灰色为未连接,红色为出错),其下 列出属于它的脚本。通过 新建 → 新建数据库连接 或面板上的按钮创建连接;在 文件树中打开 .lnc 也会跳转到面板。列表下方是所选连接的对象树。连接的上下文 菜单提供 连接/断开连接、新建脚本、SQL 控制台 和 编辑连接。

没有连接的文件夹:空的连接面板提供 新建连接… 和 打开数据库文件…,并列出文件夹中已有的 SQLite 和 DuckDB 数据库文件,每个都带有 连接。数据库按文件内容识别,而不是按扩展名(.db 可能是两者之一); 单击一下就会在文件旁创建连接(.lnc),按名称指向该文件——两者一起移动——并立即 连接。

脚本:脚本就是普通的 .sql 文件,和其他文件一样在代码标签页 中打开——带有历史、更改条和 保存版本。标签页工具栏的开头是连接选择器和 执行按钮;首次执行时结果显示在编辑器下方(也可以放在旁边:执行 → 结果显示在旁边)。脚本的来源连接保存在 .lnc 中,重新打开脚本时它已经 指向该连接。在选择器中选择其他连接只对该标签页有效;要更改来源,请使用 此脚本始终 使用“…”。没有来源的脚本会以无连接打开,即使文件夹中只有一个连接:任何脚本都 不会指向你没有选择的数据库打开。SQL 控制台是没有文件的标签页,已关联到该连接。 结果的分析区保存在脚本旁边(query.sql.analysis.json),每个查询一个: 文件中保存图表、数据透视表和每个查询的 SQL——从不保存数据。

每个标签页一个会话:每个脚本标签页都与数据库打开自己的会话——一个标签页中的 长查询不会阻塞其他标签页或对象树,一个标签页的 Commit 也不会确认另一个标签页的 操作。临时表和 SET 命令只在执行它们的标签页中有效。如果服务器限制连接数, 请在 编辑连接 中取消勾选 每个标签页一个会话。SQLite 和 DuckDB 文件始终共享 同一会话(在 SQLite 中,一次写入会锁定整个文件)。面板会显示每个连接打开了多少个 会话。

驱动: SQLite 和 DuckDB(文件)为原生。PostgreSQL、MySQL/MariaDB、 SQL Server、通用类型通过 ODBC。原生 Oracle(不使用 ODBC)。 SQL Server 使用 Microsoft 的 msodbcsql 驱动(请在机器上安装), 提供 Windows 身份验证或用户/密码,以及通道加密选项 (Encrypt / 信任证书)。对于 Oracle,请在设置 → 数据库中设置 Oracle Instant Client 文件夹 — 它在运行时加载, 无需安装。Oracle 连接有四种模式: 服务名 (主机/端口/服务)、SID(主机/端口/SID)、TNS 名称 (客户端文件夹中 tnsnames.ora 的别名)、完整的 TNS 描述符 (粘贴到文本框中)。

密码: 开启保存密码后,会在 .lnc 文件自身中 加密(采用可移植的加密,在其他机器上也能打开)。关闭时不保存密码, 并在每次连接时询问。加密使用按工作区的安全口令, 在帮助 → 配置安全口令中设置。请妥善保管 — 没有它, 在其他任何地方都无法打开密码。安全口令仅缓存在本地机器上 (绝不会发送到 Git)。

勾选 打开时连接 后,打开该连接的脚本时会自动连接。自动连接是 静默的:如果需要输入密码(询问模式,或已加密但本机没有缓存安全口令),脚本会以 未连接状态打开,不会打断你。

放心操作生产环境:在编辑连接中,环境字段说明这是哪个数据库——开发、 预发布或生产——它的颜色会显示在 .sql 标签页的连接选择器上、标签页顶部的色带上,以及连接 面板的徽标上。在生产连接上,修改数据库的操作(INSERT、UPDATE、DELETE、 CREATE、DROP、存储过程……)会先显示将要执行的内容并请求确认,没有 WHERE 的 UPDATE/DELETE 会被突出显示;默认按钮是取消,保存网格中的修改时也会同样询问。勾选 只读后,无论在脚本、网格还是表的数据中,凡是修改数据库的语句都会在离开 LightNote 之前被拒绝:网格不再提供 编辑,在 SQLite 中文件以只读方式打开。LightNote 无法判断是否只读的语句(BEGIN … END 块、 DECLARE)按写入处理。

SSH 隧道:对于位于 SSH 服务器(跳板机)之后的数据库,请在 SSH 隧道中选择工作区里的一个 SSH 连接(.lns)——与远程终端使用的相同,含用户名、密钥或加密的密码。此时主机和端口是从 SSH 服务器看到的数据库地址(通常是 localhost)。连接时,LightNote 会打开隧道并通过它连接数据库; 断开连接会关闭隧道。隧道只在你连接时启动(打开文件时绝不会启动),.lns 必须位于工作区内,执行命令的 ssh 选项(ProxyCommand、LocalCommand、-F)会被拒绝——-J 可以使用。只有许可列表中的选项会被接受(-J、-i、-4/-6、-C,以及带连接、加密和认证键的 -o):-A、-R、-I 和 -E 也会被拒绝。 带隧道的连接不会由 AI(MCP)、lnote 或块打开,因为它们会直接连接。

服务器信息:连接时,应用会询问数据库关于自身的信息——版本、当前数据库和架构、用户、大小、 编码、排序规则和时区,以及服务器是否接受写入(副本不接受)。版本显示在连接的工具提示中,其余信息在连接的上下文 菜单中的 服务器信息… 里,并附有复制按钮。服务器未提供的 信息(旧版本、缺少权限)会被省略,不会报错。请 AI 解释错误或分析计划时,版本会一并发送:它能建议的语法取决于 版本。

SQLite 中的外键:只有在连接请求时,SQLite 才会强制检查声明的外键(以及 ON DELETE CASCADE),而应用的连接会请求:删除被其他行引用的行,或插入指向不存在记录的引用, 都会被拒绝,CASCADE 会按架构删除子行。编辑连接… 中的 强制检查外键 复选框可以 关闭它——仅在无序批量导入时使用。开启并不会检查文件中已有的数据:服务器信息… 会按表统计已经存在的 失效的引用(指向不存在记录的行),它们是由不做检查的工具写入的。

执行与查看结果

执行: Ctrl+Enter 执行光标处的语句,Alt+X 执行整个脚本。 结果会分页显示,每个结果标签都带有底部操作栏: 获取下一块、冻结结果、总计数、更改行上限、 刷新(重新执行)、查看/复制 SQL、导出...、从选中行 生成 SQL。什么算一条语句由文本本身决定:BEGIN … END 块和 $$ … $$ 主体保持完整,只有 /(Oracle)或 GO(SQL Server)的单独一行也会分隔。

借助补全编写 SQL:Ctrl+Space 按上下文补全:在 FROM、JOIN、UPDATE 或 INTO 之后是 数据库的表(输入空格时列表会自动打开),在 别名. 之后是该表的列(输入点号时 自动打开)——即使 FROM 还没写出来,也无需在树中展开任何内容:LightNote 会在 后台读取数据库的目录,只有当文本写到某个表时才读取它的列。在包含多条语句的脚本中, Ctrl+Enter 将要执行的那条会被突出显示。某条语句失败时,它会在编辑器中被标记,数据库 指出的名称(不存在的表或列、语法错误的位置)会带上波浪线,光标会移到那里,鼠标停在上面 时会显示错误信息。在表名上 Ctrl+单击 或按 F12 打开它的数据;按 F4 打开它的属性。格式化(Shift+Alt+F)无需安装任何工具即可整理 SQL:每个子句 一行,SELECT 有多项时每项一行,AND/OR 和子查询 缩进。它只改变空白和关键字的大小写,从不改动名称、文本或注释;不是查询的语句 (CREATE、BEGIN … END 块)保持原样。

冻结结果: 一次性从数据库读取整个结果,并保存到本地表中(若内存放不下,则写入磁盘)。 此后网格滚动不再查询数据库,行数变为精确值(无需统计总数),点击列标题可排序(再次点击反转,第三次点击回到数据库返回的顺序), 导出也从本地副本读取。通过列标题排序最多支持 10 万行;超过之后会被拒绝,原因显示在列标题的提示中——每一页都要对整份副本重新排序,浏览整个网格又会花上几分钟。 如果第一页就已取回整个结果,无需冻结即可排序,因为行已经在内存中。不能排序的是仍在分页中的结果的第一部分——那样列标题声称的顺序只对屏幕上的内容成立。

图表和数据透视表随之覆盖整个结果——包括原本没有图表的 数据库。如果冻结提前结束(你点了停止,或达到了上限),行仍在本地,但图表和数据透视表仍留在 服务器上:对结果的一部分求和会得出错误的数字;此时排序网格也只排序已取回的行,而非整个结果。

刷新会解冻并重新执行查询。 无论是否冻结,已经在网格中显示过的页面都会保存在本地:回滚到其中一页不会再次查询数据库。 同一时间只运行一个冻结:打开两个结果时,在另一个上点击冻结结果会被拒绝并说明原因,而不会中断正在进行的冻结;要停止它,请在它自己的标签页中使用停止。

结果网格:每个返回行的查询都会得到一个以表名命名的标签页(完整的 SQL 在标签页的提示中)。 重新运行会替换这些标签页,但已固定的除外——右键单击标签页,选择固定结果——它们会保留下来以便对比; × 关闭一个结果。标签页旁边的运行摘要显示返回了多少行、用了多长时间,或以红色显示错误;单击它会打开 消息。页脚也显示行数和时间,结果尚不完整时还提供获取下一块和统计总数。网格上方的工具栏汇集了其余操作: 刷新、冻结、上限、分析菜单、值、列和导出(含复制 SQL、 查看 SQL 和生成 SQL);窗口较窄时,按钮会先省去文字,再收起。表头显示每一列的类型(文本、数字、 日期……),并用钥匙图标标出表的键列;鼠标停在上面会显示类型全称。拖动表头可重新排列列,列(或右键单击 表头)可以隐藏、显示列并按内容调整宽度——这些设置在刷新、更改上限和排序后依然保留。

单元格:NULL 以淡色斜体显示,与空文本区分开,数字右对齐;选中多个单元格时,页脚会 显示选中数量,若都是数字,还会显示总和与平均值。值(或上下文菜单中的在面板中查看值)会在旁边显示所选单元格的 完整值,不截断,并可用格式化仅在显示时美化 JSON/XML;面板中的记录按钮会把值换成整行转置 ——每行一列,名称与值并列——并随光标移动(单元格菜单中的查看整条记录也可以)。在单元格菜单中, 按此值筛选 / 排除此值会以该单元格加上 WHERE 重新运行查询,转到引用的记录会沿着该列的 外键,用这个值查询父表。

在网格中搜索和筛选:焦点在网格上时,Ctrl+F 会跳到在网格中搜索字段,只显示任意列包含该 文本的行——焦点在编辑器中时,Ctrl+F 仍然是 SQL 的搜索。旁边的漏斗打开高级筛选(按列设置条件, 支持与/或),被筛选的列在表头上会显示漏斗;单击图表中的条形、数据透视表的单元格或质量中的高频值,会成为一个 选择,以标签形式显示在网格上方,单击其 × 即可移除。页脚会显示剩下多少行、共多少行。搜索和筛选作用于 完整结果,在本地副本上进行:结果完整取回时立即生效;只有第一部分时,该字段显示为灰色并说明原因——只筛选屏幕上的 内容会把下一部分里的行藏起来——冻结后即可使用。搜索或筛选生效时,图表、数据透视表和质量描述的是与网格 相同的子集。这些都不会改变查询:要在数据库中缩小范围,请使用按此值筛选或编写 WHERE。

图表和数据透视表:在哪里计算。分析菜单中有图表、数据透视表、 质量和分析区,并在分析范围下选择本地数据或整张表(在服务器上),当前生效的 选项会打勾。结果在第一页完整装下时,默认为本地:LightNote 直接对屏幕上的结果进行汇总,调整坐标轴、 汇总方式或区间时不必再访问数据库——而且由于本地引擎是 DuckDB,在 Oracle、SQL Server、PostgreSQL 和 MySQL 中 也能使用图表,尽管其 SQL 无法在这些服务器上运行。结果被截断时,本地选项不可用,并说明原因: 对样本汇总会得到错误的数字,提示截断也无济于事,因为图表里读的是条形的高度。服务器选项对整个查询进行汇总, 每次调整运行一次查询;网格中有搜索或筛选时不可用(筛选后的子集只存在于这里)。数据库以文本形式返回的数值列—— 例如 Oracle 的 NUMBER——会被识别为数字;以零开头的标识符(如 01310)仍为文本。在 Oracle、 SQL Server、PostgreSQL 和 MySQL 中,结果尚不完整时,图表显示为灰色并说明原因,冻结结果后即可使用。

结果的数据质量。分析菜单中的质量会在网格旁边打开与文件表相同的按列概况。它由 DuckDB 计算:结果完整取回(或已冻结)时在本地副本上计算,数据库本身是 DuckDB 时在数据库中计算。在 Oracle、SQL Server、 PostgreSQL 等数据库中,结果尚不完整时,面板会说明无法描述的原因,并当场提供冻结结果;如果冻结在上限处停止, 它会建议缩小查询范围——只描述一部分,等于描述另一张表。单击高频值会筛选网格(与搜索一样,是一个选择);要在数据库中 缩小范围,请使用单元格菜单中的按此值筛选。

分析基于多少数据。在图表、数据透视表、质量和分析区上方,有一行说明计算使用的是全部数据(在本地副本上会自动统计行数),还是在数据库中针对整个查询计算的;后一种情况下行数通过统计行数链接获取,因为统计会再次执行查询。当冻结在结束前停止、而网格中有搜索或筛选时,分析只能针对已取回的部分,这一行会以警告色显示部分数据。同一句话也会写入分析区报告的说明中。

数据快照:已保存脚本的分析会把卡片保存在脚本旁边,而不是数据——要再次查看就需要 数据库。分析区的数据快照按钮会把完整结果连同卡片保存到脚本旁边的 Parquet 文件中;打开该 文件即可在不连接的情况下,基于那一刻的数据查看同一分析。这是一个明确的操作,窗口会事先提醒: 该文件是数据库数据的副本,如果文件夹进入 Git 或被共享,它会一起带走。只有完整结果在这里时 才可用——如果只有第一部分,请先冻结(按钮的提示会说明)。

执行计划:执行菜单中的 执行计划 会获取光标所在语句的计划(SQLite、 DuckDB、PostgreSQL 和 MySQL),并在 计划 标签页中显示:步骤树,最重的步骤突出显示,并用一句话 说明它的含义——在 PostgreSQL 和 MySQL 中是自身成本最高的步骤(它的成本减去其内部步骤的 成本),并给出占总成本的比例;在 DuckDB 中是产生行数最多的步骤;在不提供成本的 SQLite 中是对整张表 的读取。当某个步骤在有索引的数据库中读取整张表时,这句话会提醒:在筛选列上建索引通常可以避免 (在列式的 DuckDB 中读取整张表是常态,不会出现这条建议)。查询中的别名(FROM orders o) 会替换为表名。以文本查看 以缩进形式显示同一棵树,复制计划 可复制它。这些数字是规划器 的估计:查询不会被执行。手动输入的 EXPLAIN 在 LightNote 能识别结果时同样会在计划 标签页中打开;无法识别的仍显示在网格中。在无法用单条语句给出执行计划的数据库中(SQL Server、 Oracle),该项会被禁用,原因显示在提示中。

用 AI 分析:突出显示告诉你哪个步骤开销大;计划选项卡中的用 AI 分析 按钮会询问规划器为什么选择它以及该改什么。发送查询、计划以及它读取的表的结构——包括已有的 索引,这样 AI 就不会建议创建已经存在的索引。值会在发送前移除(引号中的文本和数字变为 ?;注释被删除),查看将要发送的内容会准确显示发送了什么。建议会作为新脚本在编辑器中 打开,不会执行任何内容。

架构

表的数据: 在架构树中双击某个表,会在数据子标签上打开它的 标签页。网格上方有两个字段 WHERE 和 ORDER BY,按 Enter 应用——两者都发送到数据库,因此作用于整张表,而不只是屏幕上的行。 单击列标题同样在数据库中排序(升序、降序、不排序),并填写 ORDER BY; 单元格菜单中的按此值筛选会把条件加到 WHERE 中,可见且可编辑。 该标签页与脚本标签页一样,拥有自己的数据库会话。通过属性打开表时不会查询数据: 只有显示数据子标签时才会运行查询。ORDER BY 为空时,行按主键顺序返回(字段中会显示是哪个键):完全没有顺序时,数据库不保证前后两页的顺序一致,滚动时可能重复或漏掉行。按表头排序时,值相同的行由键决定先后。

编辑数据:在有主键(或由 NOT NULL 列组成的唯一键)的表的网格中, 双击单元格、按 F2 或直接开始输入。编辑器与列的类型一致:日期带日历, 真/假用列表选择,数字框只接受数字,JSON 在确认时校验。删掉的文本会成为空文本, 而不是 NULL:NULL 是单独的操作(单元格菜单中的设为 NULL,或值面板中的 NULL 按钮,值面板也可编辑长文本)。Insert 添加新行——保持默认的列 会得到数据库的默认值——,复制行复制所选行(键除外),Del 将行标记为删除 (再按一次取消)。这些都不会立即写入数据库:更改保持待处理,在网格中以颜色 标出(修改为琥珀色,新行为绿色,删除为带删除线的红色),上方的横条显示数量。 查看…显示将要执行的 SQL,并可复制为脚本;保存在同一个事务中写入全部 更改,并检查每条 UPDATE 和 DELETE 恰好影响一行——如果某行在读取后被其他会话修改或 删除,或任何语句失败,就不会写入任何内容,更改仍留在网格中;放弃撤销全部 更改。有待处理的更改时,重新加载网格、更换筛选或关闭标签页都会先询问。

网格不能编辑时,会说明原因——在按钮的提示中,以及尝试编辑时出现的横条中。 没有主键、也没有由 NOT NULL 列组成的唯一键的表是只读的:没有键,就无法知道每次编辑会 修改哪一行。在脚本标签页中,如果查询是针对单个表、列出其列(或使用 SELECT *)并包含键的 SELECT,结果同样可以编辑;连接、子查询、 计算列或重命名的列、DISTINCT、GROUP BY 和 UNION 会使结果变为只读。二进制列不能在网格中编辑。如果标签页中有已开启的事务(自动提交关闭) 且有待处理语句,请在保存前提交或回滚:保存网格会把它们一并提交。

对象属性: 在架构树中的表上按 F4(或在右键菜单中选择 属性),会直接在结构处打开它的标签页;数据旁边还有四个子标签: 列(序号、名称、类型、是否可空、 默认值,主键列带有钥匙图标)、键(主键、外键、唯一和检查约束;双击外键会打开被引用的表)、 索引和 DDL — 对象的 CREATE TABLE,可复制、另存为 .sql 或在可编辑标签页中打开。当数据库不直接提供现成 DDL 时(PostgreSQL 和 SQL Server 没有该命令), LightNote 会根据元数据重建(DDL 命令因权限不足被拒绝时同样如此),并在标签页中明确说明。 如果连列的目录都无法读取(没有权限,或目录不可用),就没有可重建的依据:标签页会给出说明,而不是 静默地留空。表的右键菜单还提供复制 DDL而无需打开 标签页。

对象树:在连接面板的列表下方,所选连接的对象树会把表和 视图分开(各有图标),并用钥匙图标标出属于主键的列。树中还会显示存储过程和函数、触发器和序列(数据库中有的话);双击存储过程、函数或触发器,会在该连接的 SQL 控制台中打开其源代码。每个表旁边显示近似行数,提示中显示它的注释——这是数据库保存的估计值,不是 COUNT(*)。系统架构(SYS、pg_catalog…)默认隐藏;列表末尾的项可以显示它们。筛选框会立即筛选已加载的内容,输入 2 个字母起也会在数据库中搜索:没有人展开过的对象会出现在顶部的数据库中文件夹里。在脚本中,Ctrl+Alt+O(连接选择器中的转到表…)可用键盘打开搜索,在表名上按 F12 会打开该表的标签页。

刷新元数据。在脚本中执行 CREATE、ALTER、DROP 或 RENAME 后,树、自动补全和表属性会在几秒后自动重新读取表、列和类型,并且不会收起树中已展开的内容。关闭自动提交时,重新读取会等到 Commit(或 Rollback),因为在此之前这项更改对其他会话尚不存在。当结构在外部被修改(其他程序、迁移)时,请使用脚本工具栏、连接菜单、树筛选框旁的刷新元数据按钮,或表属性中的刷新。

架构探索: 右键单击某个表可打开 在编辑器中插入 SELECT、查看数据、统计行数、 复制限定名,或 生成 SQL子菜单 → INSERT/UPDATE/MERGE。界面会列出表的列,你可以勾选包含和 键,查看实时预览并将命令插入到编辑器 (MERGE 以 ANSI 输出,驱动不支持时会显示警告)。 在结果网格上,底部栏的 生成 SQL 按钮会用选中行的值 生成 INSERT/UPDATE/DELETE(当查询为单表 SELECT 时可用)。 在树中浏览过的表名和列名也会开始出现在该连接 .sql 编辑器的 自动补全(Ctrl+Space)中(不会进行额外的数据库查询)。

ER 图:在表文件夹的上下文菜单中,表的 ER 图会画出所有表;在某个表的 菜单中,ER 图(此表及其引用的表)会画出该表及其外键指向的表。结果是数据字典中的一篇 笔记,其中有一个 mermaid erDiagram 代码块——列及其类型、PK/FK, 每个外键作为一个关系(列允许 NULL 时为可选,键本身就是主键时为一对一)。它是笔记中的文本:可以用 Git 进行版本管理,也可以像其他图表一样编辑。超过 40 个表时其余的会被省略,笔记会说明数量。

将文件导入到表:将文件导入到表…(在连接的菜单和表文件夹的菜单中)以及 将文件导入到此表…(在某个表的菜单中)会把 CSV、TSV 或 Excel 电子表格导入数据库——这是 导出结果的反向操作。窗口会显示预览,并列出为每列读取的类型:只有当所有单元格都符合时 该类型才成立(没有前导零的整数——01310 是代码,保持为文本——、使用点或逗号的小数、ISO 日期、真/假);dd/mm/yyyy 格式的日期保持为文本,因为月份可能在前。空单元格变为 NULL。 分隔符的判断方式与表格视图相同。创建表使用文件名;追加到表会先检查文件的列是否存在于 该表中。所有操作在一个事务中进行:只要有一行失败就不会保留任何内容——并且本次导入创建的表会被 删除。锁定在这里同样有效:只读连接会拒绝,生产连接会先询问。在 DuckDB 连接上,CSV 由数据库直接读取, 没有行数上限;在其他连接上,上限为 100,000 行。

导出、变量与事务

导出结果: 右键单击结果网格并选择导出结果...,可写出 CSV(分隔符・引用符字符・始终加引号・标题行・NULL 的表示)、 JSON Lines、SQL(带表名的 INSERT 语句),并可设置可选的行数上限。 导出不仅限于屏幕上可见的部分,而是以流式(分页重新获取)遍历整个查询。

将结果添加到今日笔记:在网格的导出菜单中,添加到今日笔记会按屏幕上的 样子添加表格——可见列、按网格顺序、应用搜索和筛选——并在其下方以 sql 代码块添加 查询:笔记会记录数字的来源。NULL 显示为 NULL,数字右对齐;当表格不是完整结果 时(前 200 行,或只有已加载的行),会有一行斜体文字说明。

脚本变量:在脚本的一行中写 @set 名称 = 值 即可定义变量 ——前缀 @ 使其不会发送到数据库(不会与 Postgres/DuckDB/SQL Server 真正的 SET 冲突)。:name 引用会在执行前被替换(字符串和注释之外; ::type 类型转换和 :1 这类绑定保持不变);没有值的 :name 会在执行前弹出输入框。执行菜单中的 变量… 会打开已定义 变量的界面(编辑/添加/删除)。

参数:运行带有 :名称 的语句时(除 PostgreSQL 外,也包括 ?、?1、?2;在 PostgreSQL 中 ? 是 JSON 运算符),“查询参数”窗口会显示该语句及其全部参数,并已填入上次使用的值, 每个参数的列表保留以前的值:换一个值重新运行只需改一个字段。值会按原样放入 SQL,因此 文本需用单引号括起('abc')。脚本用 @set 定义的不会询问。取消 勾选“每次运行时询问”后,该标签页将直接使用上次的值而不询问;之后要更改,请使用 变量…。

查询历史:执行菜单中的 历史… 会打开一个窗口,列出此连接 最近成功执行的语句,列为 SQL / 时间 / 耗时 / 行数。选择一条可 重新执行、 插入到编辑器 或 复制(双击即插入),也可以使用 清除历史。历史只 保存在本机(不会进入 Git,也不会写入 .lnc)。

所有连接的历史:在历史窗口中勾选所有连接,即可按从新到旧的顺序查看所有数据库的查询, 并带有连接一列,还可以用筛选字段在全部查询中搜索。重新执行只适用于本连接的查询;其他连接的查询会插入到 编辑器中,以便你在正确的数据库上运行。

事务:自动提交选项(默认开启)位于执行菜单中。关闭后, 更改会保持待确认,直到你确认(Commit)或放弃(Rollback),标签页工具栏会 显示 事务 · N 条待确认,并提供这两个命令。在事务未完成时关闭标签页、切换连接或 断开连接,都会询问如何处理。