sql在线运行工具

上周帮同事调一条死锁的运行 SQL,本地 MySQL 跑得好好的工具,一上测试环境就卡住。运行我懒得让他装客户端,工具直接甩了个网页过去——打开浏览器,运行粘贴语句,工具三秒出结果。运行他愣了半天:“这玩意儿哪来的工具?”其实这类在线 SQL 运行工具已经跑了好几年,只是运行很多人还没养成习惯。

最早用的工具是 sqlfiddle,界面丑得离谱,运行但能同时开 MySQL、工具PostgreSQL、运行SQLite 三个面板。工具写建表语句、运行插数据、跑查询,一套流程下来不用切窗口。缺点也明显:会话保持时间短,复杂查询偶尔超时,有一次我跑一个五表关联,等了二十秒直接报 504。后来换到 db-fiddle,体验差不多,但支持导出 schema 和数据的 SQL 脚本,方便存档。这两个算是老牌选手,胜在稳定,输在颜值。

真正让我觉得“可以日常用”的是 sqliteonline。它把 SQLite 编译成 WebAssembly 塞进浏览器,所有计算都在本地完成,断网也能跑。我试过在高铁上用它改一个临时表结构,全程没连服务器。打开页面直接就是一个内存数据库,左边对象树,右边查询窗口,底部结果集。支持导入 CSV,自动推断字段类型,省掉手写 CREATE TABLE 的麻烦。唯一别扭的是 SQLite 语法和 MySQL 有差异,比如日期函数、自增主键写法,复制粘贴时得留个心眼。

如果你要练 MySQL 特有语法,比如窗口函数、CTE、JSON 字段操作,得找专门跑 MySQL 的在线环境。db4free 提供免费 MySQL 实例,注册后给一个远程连接地址,用任何客户端都能连。但它的服务器在德国,国内访问延迟高,跑个简单 SELECT 都要等一两秒。另一个选择是 sqliteonline 的 MySQL 模式——其实是后端挂了一个真实 MySQL 容器,免费版限制查询时长和结果行数。我拿它测过 ROW_NUMBER() OVER (PARTITION BY ...),结果正确,响应也快,就是会话十分钟不操作就回收,得重新建表。

企业内训场景更麻烦。有次给新人讲索引优化,需要每个人动手改 SQL 看执行计划。装本地环境太慢,用公共在线工具又怕数据泄露。后来找到一种折中方案:用 Docker 跑一个 adminer 容器,映射到内网端口,每人发一个独立数据库。adminer 本身是 PHP 写的单文件管理工具,配合 docker-compose 起 MySQL,五分钟搞定。新人浏览器打开 IP 就能用,查询结果直接导出 CSV。这套组合比任何在线 SaaS 都可控,代价是你得有一台内网服务器。

安全边界得说清楚。所有公开的在线 SQL 工具,默认都不要放真实业务数据。哪怕是 WebAssembly 本地执行,浏览器插件、剪贴板历史、页面缓存都可能留下痕迹。我自己的习惯:建表用假字段名,测试数据用 SELECT 1 或随机字符串,跑完立刻关标签页。真要处理敏感数据,宁可花十分钟装个 DBeaver 连本地库。

性能方面别抱太高期望。在线工具适合验证语法、调试小结果集、临时算个数。我试过在 sqliteonline 里导入一个 50 万行的 CSV,浏览器直接卡死。后来改用 DuckDB 的在线版——它专门做分析型查询,列式存储,同样数据量聚合查询两秒出结果。但 DuckDB 语法偏 PostgreSQL,和 MySQL 差异不小,切换成本得算进去。

选哪个工具,看你的具体场景。临时验证一条 SQL,sqliteonline 最快;需要分享给同事协作,db-fiddle 的分享链接最方便;练 MySQL 高级特性,db4free 或 sqliteonline 的 MySQL 模式够用;内网教学,Docker + adminer 最稳。别指望一个工具通吃,多存几个书签,根据任务切换。我浏览器书签栏里常年放着四个,按使用频率排序,比装一堆客户端省事。