1 摘要

工作中经常需要链接数据库,通过配置 Emacs SQL mode,既可以获得一个 SQL的编辑器,也可以把 Emacs 当作一个数据库客户端,灵活的将任意 SQL 语句发送给数据库服务器执行并得到结果。本文汇总 Emacs SQL 的相关配置和基本使用。

2 SQLi Mode

SQLi mode 是一个交互式 SQL 模块 - 是对 SQL 数据库客户端的封装。该模块内置于 Emacs 发行版中,可以和很多 SQL 客户端一起工作。

  • psql by PostgreSQL
  • mysql by MySQL
  • sqlite or sqlite3 for SQLite
  • solsql by Solid
  • SQL*Plus by Oracle
  • dbaccess by Informix
  • isql by SyBase
  • sql by Ingres
  • osql by MS SQL Server
  • isql by Interbase
  • db2 by DB2 (IBM)
  • inl by RELEX

2.1 配置

建议使用大牛 purcell 的 SQL 配置 (我就是这么做的)。

2.2 基本使用

2.2.1 链接数据库

以 MySQL 为例。

  • 执行 M-x sql-mysql 命令进入交互式提示,根据提示输入相应的用户、密码、数据库等信息,以建立到数据库的链接。
  • 可以执行 M-x sql-save-connection 保存链接信息(默认保存至 custom.el)。

2.2.2 关联 SQLi Buffer

  • 在当前 .sql 文件中(SQL mode),通过 M-x sql-set-product 命令指定当前缓冲区使用何种 SQL 方言。默认使用 SQL(ANSI)
  • 通过运行 M-x sql-set-sqli-buffer 选择要关联的 SQLi buffer,随后可以将任意 SQL 脚本送至该 SQLi buffer 执行。

2.2.3 执行 SQL

.sql 文件中,使用如下快捷键发送 SQL 至 SQLi buffer 以执行 SQL。

key 命令 说明
C-c C-c sql-send-paragraph 发送段落 (前后空行为一个段落)
C-c C-r sql-send-region 发送选择区域
C-c C-b sql-send-buffer 发送整个 buffer
C-c C-s sql-send-string 发送字符串

2.2.4 调整 SQLi Buffer 显示

SQLi buffer 默认显示会导致很多列的显示折行,可以运行 M-x toggle-truncate-lines 调整显示模式。

3 Org SQL

Emacs org 支持 SQL 代码块。通过命令 C-c C-c 即可执行 SQL 代码块并显示相应的结果。

3.1 SQL 代码块示例

1
2
3
4
5
6
7
8
#+BEGIN_SRC sql :engine mysql :dbhost localhost :dbuser root :database test :export both
SELECT 1;
#+END_SRC

#+RESULTS:
| 1 |
|---|
| 1 |

3.2 通过 Header 参数提供链接信息

通过定义 header 参数提供数据库链接信息,该方法仅适用于特定的 SQL 代码块。

1
2
3
4
5
6
7
#+header: :engine mysql
#+header: :dbhost localhost
#+header: :dbuser root
#+header: :database test
#+BEGIN_SRC sql
SELECT 1;
#+END_SRC

3.3 通过 PROPERTIES 提供链接信息

该方法可以在一个 Org 标题 :PROPERTIES: 内加入 header 参数提供链接信息,该方法可以在该 Org 标题下共享链接信息。

1
2
3
4
5
6
7
8
\** 设置 MySQL 数据链接
  :PROPERTIES:
  :header-args: :engine mysql :dbhost localhost :dbuser root :database test
  :exports:  both
  :END:
#+BEGIN_SRC sql
SELECT 1;
#+END_SRC

4 参考文献

  1. Sql Mode - specialized comint.el for SQL interpreters。
  2. 大牛 purcell 的 SQL 配置
  3. sql.el - sql-mode 代码库。
  4. SQL Source Code Blocks in Org Mode,
  5. Setup Emacs as an SQL Database client - Part 1, by Emacs, 2014.
  6. Literate Database Work, by Howardisms, 2015.