聊聊咱们常用的 SQL 编辑器:KStudio 和 KSQL Developer 到底怎么选?

其实干咱们IT这行的,不管你是写后端代码的还是专门做DBA的,每天都得跟数据库打交道。那么手里头肯定得有一把好用的兵器。通常来说,大家最常提的就是 SQL 编辑器 了。今天咱们就聊聊金仓的这两个工具,一个是KStudio,另一个就是KSQL Developer。其实它们都属于 sql 编辑工具,但是侧重点稍微有点不一样。KStudio是个大而全的集成开发环境,啥都能干。而KSQL Developer呢,往往仅仅只是作为一个独立的、专门面向应用开发者的数据库开发和管理工具来用。也就是说,它更轻量,更专注于写SQL和管理对象。今天咱们就根据它的产品手册,掰开揉碎了唠唠这玩意儿到底怎么用,看看它和KStudio比起来有啥不一样。
一、 咱们干活的,为啥离不开一个好用的工具
1.1 命令行虽好,但效率是个大问题
其实很多老手都喜欢敲命令行,觉得特别极客。用ksql或者sqlplus连上库,啪啪一通敲。但是兄弟,现在的系统多复杂啊。表几百张,字段上千个。你敲个SQL还得把表名全背下来吗?那是不现实的。的情况就是,你敲了一半忘了字段叫啥了,还得去查数据字典。这时间就白白浪费了。那么有个可视化的工具就不一样了。树状结构一点,表名、字段名全出来了。效率自然就高。
1.2 KSQL Developer 的定位是啥
这玩意儿就是中电科金仓搞的一个独立版本的数据库开发工具。其实你可以把它看作是KStudio在SQL编辑这块儿的一个强化版或者独立版。它主要就是用来快速查询、创建和管理不同类型的数据库的。目前它已经支持了KingbaseES、Oracle、MySQL还有SQLServer这四大主流数据库。也就是说,你装了这一个工具,就能管四种库。不用来回切窗口了。这对咱们干活的来说,可是个省事儿的好功能。
1.3 环境要求高不高,装起来麻不麻烦
通常来说,工具越强大,吃资源越多。但是KSQL Developer其实挺轻量的。它的硬件要求,CPU只要是x86 64位,或者MIPS、ARM都行。内存只要1GB就够了。硬盘空间也就占个1GB。现在的电脑随随便便都满足。环境要求方面,只要有个gtk 3.2.0以上的图形工具包就行。支持的数据库版本也挺全,KingbaseES支持V8R3、V8R6、V9。Oracle支持19c到23c。MySQL支持5.7以上。SQLServer支持2016以上。基本上覆盖了咱们平时常用的那些版本。
二、 连接管理:怎么把各种库都连上
2.1 咱们为啥要建连接
你要用工具管数据库,第一步肯定得连上它。这事儿不用多说。KSQL Developer默认是用JDBC驱动去连的。不同的库,参数不一样。比如金仓的库,你得填主机、端口、数据库、用户名、密码。Oracle呢,还得搞个服务名、角色啥的。MySQL和SQLServer也各有各的填法。这玩意儿内置了驱动包,你要是想换自己的驱动,也支持手动替换。
2.2 连不上咋整,状态怎么看
连上连不上,它界面上都有提示。在左边的数据库导航窗口里,看图标就行。没连上的,图标正常显示,下面的对象节点是收起来的。连上的,图标下面有个对号,节点能展开。要是失效了,比如密码错了或者库挂了,图标下面就显示个叉号。这时候你右键点一下连接,选编辑连接,重新改改信息就行。要是想断开,选断开连接就完事了。
三、 数据库对象管理:可视化建表改表,不用死记硬背 DDL
其实写DDL是最烦人的。建个表,加个约束,弄个索引,语法记不清还得查文档。KSQL Developer在这方面挺方便的。它把KingbaseES、Oracle、MySQL、SQLServer的对象管理都做进去了。咱们挑重点的说说。
3.1 KingbaseES 的对象怎么管
金仓的库是它的重头戏。基本上你能想到的对象,它都能管。
3.1.1 表和视图咋建
建表这事儿,点点鼠标就行了。右键点“表”文件夹,选“新建表”。界面里有基本属性、分区、约束、外键、索引、触发器、权限、DDL这些页签。在基本属性里,你填表名、表空间。然后加字段,选数据类型、精度、标度,设个默认值啥的。如果你要建分区表,就到分区页签里。它支持范围分区、列表分区、哈希分区。范围分区就是按值的范围切,比如按日期。列表分区就是按具体值切。哈希分区就是算个hash值散开存。这里还有个解绑和绑定的操作。解绑就是把分区子表拆下来当普通表用。绑定就是反过来。交换分区就是把两个结构一样的表的数据互换一下。约束这块,主键、唯一键、检查约束都有。外键也能设级联删除、设为空啥的。索引支持B-tree、Hash、GiST、GIN这些。如果是分区表建索引,还能选是建全局索引还是本地索引。触发器也能直接挂上。这比手写SQL快多了。
视图和物化视图也是同理。视图就是个虚拟表,你写个SELECT语句存起来。物化视图是把结果物理存下来,查询快。物化视图建好后不会自动更新,得用REFRESH MATERIALIZED VIEW语句刷一下。
3.1.2 程序包、函数和存储过程咋写
这块是开发人员最常用的。函数有返回值,存储过程没返回值但可以有输出参数。建的时候,填个名字,写上参数和返回类型,然后就把PL/SQL代码敲进去。这玩意儿还带调试功能。右键点函数或者存储过程,选“调试”,就能进调试界面。可以打断点,单步执行。这个太有用了。找逻辑bug的时候全靠它。程序包就是把相关的过程和函数打包在一起,方便管理。同义词就是起个别名,省得打那么长一串名字。自定义数据类型也支持,比如组合类型、枚举类型啥的。
3.1.3 用户角色和表空间的安全管控
企业层级里的项目,权限管理特别重要。在这里建用户,能设密码过期时间、连接数限制。权限分系统权限和对象权限。系统权限就是建库、建角色的权限。对象权限就是对具体表的增删改查权限。还能把角色赋给用户。表空间就是管数据文件存放位置的。建表空间的时候填个绝对路径。它还支持透明加密,勾个选就行。另外,会话管理器能看当前连了哪些人,能直接把某个会话踢掉。锁管理器能看当前有啥锁。这些排查死锁的时候特别好用。
3.2 Oracle、MySQL、SQLServer 也能管
其实用法都差不多。就是对象类型有点区别。比如Oracle有物化视图、程序包、同义词。MySQL有它自己的引擎和字符集设置。SQLServer有登录名和用户的区分。这些它都做了适配。你连上哪个库,就按那个库的规矩来。不用再去装好几个客户端了。
四、 重点来了:KSQL Developer 里的 SQL 编辑器到底有多强
这一节是咱们今天的重头戏。因为这个工具的核心就是写SQL。它提供了一个非常强大的 SQL 编辑器。你可以在里面写脚本,执行,保存,以后还能接着用。咱们看看它都有啥好功能。
4.1 怎么打开和界面长啥样
打开很简单。在左边的导航器里,右键点连接,选SQL编辑器。或者去主菜单点SQL编辑器,选新建SQL编辑器。界面上方是标签页,显示文件名。下面是工具栏,左边是行号。中间就是写代码的地方。下面还有个连接控制栏,显示你现在连的是哪个库,事务是啥状态。
4.2 SQL 模板和自动补全,写代码飞起
这个功能太香了。有时候写个长SQL,比如建个表,写个游标,手敲太慢。它有个叫SQL模板的功能。你敲个模板名字,按个Tab键,一大段代码就出来了。模板还可以自己加,自己改。在首选项里就能配。
还有个叫SQL助理的。就是自动补全。你写SQL的时候,按Alt+/,它就把表名、字段名给你列出来了。这个比死记硬背强多了。特别是有个绝活。如果你写了个SELECT * FROM table。把光标放到那个星号后面,按Alt+/。它直接把星号给你替换成这个表所有的列名。写INSERT INTO table (*)的时候用这招,省老事儿了。
4.3 SQL 格式化,代码也能整容
团队协作的时候,代码乱七八糟最招人烦。这工具有格式化功能。选中一段SQL,右键选格式。能变大写变小写。能加行注释,按Ctrl+/。能加块注释,按Ctrl+Shift+/。还能把多余的空格删掉。搞完之后,代码整整齐齐的,看着就舒心。
4.4 SQL 执行,按啥键有讲究
写完SQL得执行啊。它这里头分好几种执行方式。
- Ctrl+Enter:执行光标所在的那一行,或者你选中的那段。
- Ctrl+\\:执行光标所在的查询,然后新开一个结果页签。
- Alt+X:把整个脚本全执行了。它按分号来切分语句,一条一条往下跑。
这个根据你的习惯来用就行。
4.5 事务手自动提交,这点很关键
兄弟们,生产库上误操作,那可是要命的。这个工具默认是手动提交模式的。也就是说,你UPDATE、DELETE完,它不会马上生效。你得点工具栏上的“提交”按钮才真写入库。要是发现弄错了,点“回滚”就撤回了。这其实是个保护机制。当然,你要是觉得烦,也能切成自动提交模式。点一下工具栏上的按钮就行。
它还有个事务日志。你这段时间干的事儿,它都记着。成功的是绿色,回滚的是橙色,报错的是红色。还有个“待处理事务”窗口。能看当前哪个连接有没提交的事务。这事儿排查锁等待的时候特别有用。有时候你开了个事务忘提交了,把别人锁住了。一查这个就能查出来。直接在这个窗口里就能给它提交或者回滚掉。
#mermaid-svg-pwdXaUi4bcjbKL7G{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-pwdXaUi4bcjbKL7G .error-icon{fill:#552222;}#mermaid-svg-pwdXaUi4bcjbKL7G .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pwdXaUi4bcjbKL7G .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pwdXaUi4bcjbKL7G .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pwdXaUi4bcjbKL7G .marker.cross{stroke:#333333;}#mermaid-svg-pwdXaUi4bcjbKL7G svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pwdXaUi4bcjbKL7G p{margin:0;}#mermaid-svg-pwdXaUi4bcjbKL7G .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G .cluster-label text{fill:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G .cluster-label span{color:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G .cluster-label span p{background-color:transparent;}#mermaid-svg-pwdXaUi4bcjbKL7G .label text,#mermaid-svg-pwdXaUi4bcjbKL7G span{fill:#333;color:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G .node rect,#mermaid-svg-pwdXaUi4bcjbKL7G .node circle,#mermaid-svg-pwdXaUi4bcjbKL7G .node ellipse,#mermaid-svg-pwdXaUi4bcjbKL7G .node polygon,#mermaid-svg-pwdXaUi4bcjbKL7G .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pwdXaUi4bcjbKL7G .rough-node .label text,#mermaid-svg-pwdXaUi4bcjbKL7G .node .label text,#mermaid-svg-pwdXaUi4bcjbKL7G .image-shape .label,#mermaid-svg-pwdXaUi4bcjbKL7G .icon-shape .label{text-anchor:middle;}#mermaid-svg-pwdXaUi4bcjbKL7G .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-pwdXaUi4bcjbKL7G .rough-node .label,#mermaid-svg-pwdXaUi4bcjbKL7G .node .label,#mermaid-svg-pwdXaUi4bcjbKL7G .image-shape .label,#mermaid-svg-pwdXaUi4bcjbKL7G .icon-shape .label{text-align:center;}#mermaid-svg-pwdXaUi4bcjbKL7G .node.clickable{cursor:pointer;}#mermaid-svg-pwdXaUi4bcjbKL7G .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-pwdXaUi4bcjbKL7G .arrowheadPath{fill:#333333;}#mermaid-svg-pwdXaUi4bcjbKL7G .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pwdXaUi4bcjbKL7G .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pwdXaUi4bcjbKL7G .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pwdXaUi4bcjbKL7G .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-pwdXaUi4bcjbKL7G .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pwdXaUi4bcjbKL7G .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-pwdXaUi4bcjbKL7G .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pwdXaUi4bcjbKL7G .cluster text{fill:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G .cluster span{color:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pwdXaUi4bcjbKL7G .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-pwdXaUi4bcjbKL7G rect.text{fill:none;stroke-width:0;}#mermaid-svg-pwdXaUi4bcjbKL7G .icon-shape,#mermaid-svg-pwdXaUi4bcjbKL7G .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-pwdXaUi4bcjbKL7G .icon-shape p,#mermaid-svg-pwdXaUi4bcjbKL7G .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-pwdXaUi4bcjbKL7G .icon-shape .label rect,#mermaid-svg-pwdXaUi4bcjbKL7G .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-pwdXaUi4bcjbKL7G .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-pwdXaUi4bcjbKL7G .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-pwdXaUi4bcjbKL7G :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
自动提交
手动提交
SQL 编辑器执行
事务模式判断
直接写入数据库
暂存更改
点击提交按钮
点击回滚按钮
写入数据库
撤销更改
事务日志记录为成功
事务日志记录为回滚
4.6 结果面板和动态参数
查出来的数据在下面显示。可以到处拖动,还能固定住某个页签。想知道查了多少行,用行计数功能。
动态参数绑定也挺有意思。你在SQL里写个:name。执行的时候,它弹个框让你填值。这玩意儿写带变量的SQL特别方便。
4.7 脚本管理和查询管理器
写好的SQL可以存下来。按Ctrl+S就行。存在项目的Scripts文件夹里。下次想用,按Ctrl+Alt+Shift+O导入进来就行。还能改名,还能还原更改。查询管理器就是把你执行过的SQL都记下来。执行时间、影响行数都有。出了问题回头查这个就行。
五、 遇到报错咋整:常见问题排查指南
其实用图形工具最怕的就是启动报错,界面打不开。手册里列了几个常见的,咱们说说怎么解。
5.1 Linux 环境屏幕闪烁问题
这事儿在Linux上挺常见的。因为KSQL Developer用GTK画界面。有时候跟输入法打架。界面一直闪,内存还涨。解决方法也简单。在启动前,敲个命令设一下环境变量。export GTK_IM_MODULE=fcitx 或者 export GTK_IM_MODULE=ibus。看你用的是啥输入法。设完再启动就不闪了。
5.2 Cannot open display 报错
这个一般是远程连Linux服务器跑图形界面出的。首先看本机IP。然后设export DISPLAY=本机IP:0.0。设完再启动。要是还不行,看看X11转发开了没。看看~/.Xauthority的权限对不对。chown和chmod修一下权限就行。
5.3 jvm terminated exit code 报错
这玩意儿是用Java写的,所以JVM出问题就起不来。
- exit code=-1:一般是内存设小了。去改那个.ini文件,把-Xms和-Xmx调大点。
- exit code=127:找不到Java命令。检查JAVA_HOME和PATH环境变量。
- exit code=13:位数不对。32位的JDK配32位的工具,64位的配64位的。
- exit code=2:跟系统里别的Java环境冲突了。把Path里别的Java配置挪到后面去。
六、 附录里的干货:那些隐藏的配置参数
其实真正玩透一个工具,得看它的附录。KSQL Developer的附录里有一大堆配置参数和驱动属性。咱们挑几个实用的说说。
6.1 启动参数怎么配
在KSQLDeveloper.ini文件里。
- -vmargs:后面跟的是JVM参数。
- -Xms:JVM初始内存,默认256m。机器内存大的可以调大。
- -Xmx:JVM最大内存,默认1024m。如果你查大表数据卡,就把这个调大点。
- -Dfile.encoding:本地编译的字符集。乱码了就查查这个。
6.2 驱动属性里头的门道
这块全是JDBC连接的参数。有些参数特别有用。
比如读写分离的配置。USEDISPATCH设成true,就开启读写分离了。SLAVE_ADD填备机地址。SLAVE_PORT填备机端口。loadBalanceStrategy设负载均衡策略。1是轮询,2是固定,3是按比例。这样的话,你用这个工具连库,它自己就能把读请求分到备机上去。这对保护主机压力很有好处。
再比如reWriteBatchedInserts。这个设成true,批量插数据的时候,它会把好几个INSERT拼成一个大INSERT。速度能快好几倍。
还有prepareThreshold。预编译的开关。设成0就是每次都硬解析。设成1就是每次都用缓存。根据你的业务特点来调。
还有通信压缩的参数compressLevel。如果你的网络带宽不够,也就是网络IO是瓶颈的情况。你可以把压缩级别调高,比如设成2。这样传的数据量小了。但是CPU消耗就大了。这就是个用CPU换网络的招。
6.3 模板里的变量
咱们前面说了SQL模板。模板里其实能用变量。
- ${cursor}:指定光标停哪儿。
- ${year}、${date}、${time}:自动填当前年月日。
- ${schema}、${table}、${column}:自动填当前的模式名、表名、列名。
这些变量用好了,模板就活起来了。
6.4 数据编辑器的隐藏功能
在结果集里看数据的时候,其实也有不少工具。
底部工具栏有添加行、复制行、删除行的按钮。改完数据记得点保存。
有个“配置”按钮,能设置自动刷新。
还有个“计算”面板。能算平均值、最大值、最小值。不用再写SQL去COUNT或者AVG了。直接看结果集的时候就算出来了。
如果字段是特殊类型,比如XML、JSON。还可以在“数值查看器面板”里改展示方式。有JSON格式化、XML格式化啥的。看大文本特别方便。
七、 总结一下:这工具到底适不适合咱们
唠了这么多,咱们总结一下。其实KStudio和KSQL Developer都是金仓的好工具。KStudio是个大包,啥都有,可能装起来重点,启动慢点。而KSQL Developer呢,它就是个纯粹的 sql 编辑工具。它轻量,启动快。而且它不仅管金仓的库,还能管Oracle、MySQL、SQLServer。
对于咱们平时就写写SQL,调调存储过程,看看表结构的兄弟来说。用KSQL Developer完全够了。它那个 SQL 编辑器 的自动补全和模板功能,确实能提效不少。事务管理的日志也帮咱们避免了误操作。所以说,如果你正头疼手头没有一个顺手的异构数据库管理工具,不妨试试这个。装起来也简单,内存占用也不大。用熟了,干活绝对能快不少。今天就聊到这儿,希望能帮到正在选工具的兄弟们。



