> ## Documentation Index
> Fetch the complete documentation index at: https://openidea.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# SQL

> SQL 文件、sqls 语言服务器，以及在数据源上执行 SQL 并获得基于数据库结构的补全。

SQL 文件（`.sql`、`.ddl`、`.dml`、`.psql`、`.pgsql`、`.mysql`）开箱即有语法高亮。大部分 SQL 功能，包括执行语句、补全表名和列名，都来自[数据库工具窗口](https://openidea.sh/zh/guide/database.md)：任何可编辑的 SQL 文件都可以绑定到一个数据源，用起来和查询控制台一样。其他语言见[语言支持总览](https://openidea.sh/zh/languages/index.md)。

## 语言服务器

SQL 的语言定义使用 [sqls](https://github.com/sqls-server/sqls)。缺少它时，打开 SQL 文件会弹出“sqls 未安装”的通知，点 **安装** 会执行 `go install github.com/sqls-server/sqls@latest`，安装到 IDE 自己的工具目录，需要 `PATH` 上有 Go。`PATH` 上已有的 `sqls` 会直接使用。

IDE 不会把数据源传给 sqls。sqls 没有自己的配置文件时并不知道数据库结构，所以如果只用下文的数据库功能，可以忽略这条通知。要关闭它，在 **设置 › 语言和框架 › 语言服务器** 中选中 sqls，取消勾选 **对 SQL 文件使用 sqls**。

## SQL 文件与数据源

先在 **数据库** 工具窗口中添加数据源（见[数据库](https://openidea.sh/zh/guide/database.md)）。支持 SQLite、PostgreSQL、MySQL 与 MariaDB、Microsoft SQL Server、ClickHouse 和 Oracle，以及 Amazon Aurora、Redshift、CockroachDB、TiDB、Supabase 等兼容产品。

每个可编辑的 SQL 文件上方都有一条工具栏，其中的 **数据源** 下拉框把文件绑定到某个数据源。只配置了一个数据源时，文件会自动使用它。**查询控制台**（`⌘⇧L` / `Ctrl+Shift+Q`）打开数据库工具窗口中所选数据源（或唯一的数据源）的查询控制台。

工具栏包括：

* **执行**：执行光标所在的语句，有选区时执行选区内的所有语句。也可以用 **执行 SQL 语句**（`⌘↩` / `Ctrl+Enter`）。
* **解释计划**：显示光标所在语句的查询计划。
* **取消正在运行的语句** 和 **浏览查询历史记录**。
* 事务模式切换（**事务：自动** / **事务：手动**），手动模式下可以 **提交** 和 **回滚**（ClickHouse 不支持）。
* 模式（SQL Server 为数据库）下拉框，决定不带限定名的对象在哪里解析。

结果显示在结果标签页中。语句按 `;` 拆分，会正确处理字符串、带引号的标识符、注释、PostgreSQL 的美元符号引用以及 Oracle PL/SQL 块。

### 参数

语句中可以使用参数：`:name`、`?`、`?1`、`@name` 和 `$1`。执行前 IDE 会询问参数值，并把值作为 SQL 文本原样插入，所以字符串值需要自己带上引号。同名参数共用一个值，每个单独的 `?` 分别询问。

## 编辑支持

以下功能由 IDE 自己提供，使用绑定数据源的方言和已读取的数据库结构：

* 补全关键字、模式、表、视图、列、函数、别名和连接条件。没有数据源时只补全关键字和内置函数。
* 在 `INSERT … VALUES (…)` 中显示目标列的参数信息。
* 对无法解析的表、列和别名给出检查提示。
* **转到声明或用法**：文本中的别名和 CTE 直接跳转，表和列在数据库工具窗口中定位。
* 表和列的 **快速文档**。
* 使用内置 SQL 格式化器 **重新格式化代码**。
* 适用于 SQL 上下文（语句、查询、代码位置）的实时模板。

这些都不依赖 sqls。

## 已知限制

* 没有绑定数据源时没有数据库结构信息，补全只有关键字和函数，也无法执行语句。
* 方言跟随绑定的数据源。未绑定的文件按 SQLite 分析，没有按文件设置方言的选项。
* IDE 不会为 sqls 做任何配置。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.