前言:
现在我们对“开源免费的数据库客户端”大致比较重视,朋友们都需要剖析一些“开源免费的数据库客户端”的相关内容。那么小编同时在网络上搜集了一些关于“开源免费的数据库客户端””的相关文章,希望你们能喜欢,朋友们快快来了解一下吧!作为一名阿里巴巴开源项目的拥护者,从 Chat2DB 开源至今都有关注这个开源项目。因为之前的版本还存在较多 Bug,暂时就没有分享。目前升级到 v1.0.11 版本后,我来谈谈我个人的一个使用感受。
什么是 Chat2DB
Chat2DB 是一款有开源免费的多数据库客户端工具,支持 Windows、MAC 本地安装,也支持服务器端部署,Web 网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比 Chat2DB 集成了 AIGC 的能力,能够将自然语言转换为 SQL,也可以将 SQL 转换为自然语言,可以给出研发人员 SQL 的优化建议,极大地提升人员的效率,是 AI 时代数据库研发人员的利器。未来即使不懂SQL的运营业务也可以使用快速查询业务数据、生成报表能力。
下载安装
项目 Releases 地址:
大家根据自己的电脑环境选择对应版本即可,博主这里使用的 MacOS X64(Intel芯片)版本。
安装配置
正常双击打开拖动到 Applications 进行安装,安装完成后配置 Chat2DB AI SQL 功能。找到设置,填写 Open AI 的密钥(登录 OpenAI 官网,右上角View API keys 创建即可)。
创建完成后,在设置中输入刚刚获取的 OpenAI 密钥。
至此,我们已经完成了基础的配置,下面我们来感受一下 Chat2DB。
Chat2DB 初体验
配置数据源
这里以 MySQL 为例,点击加号(+)新建数据源。
填写相关链接信息,选择数据库,这里 test 为例:
目前 MAC 版本选择了数据库 test,但是实际上依旧还是将整个 localhost 的所有数据库列出来了。这是个已知 Bug,博主也提交了 Issue,建议官方不选择数据库默认所有,指定了数据库就单独显示某个库。
准备测试数据
这里博主准备了一份测试数据表,分别是:科目表、学生成绩表、学生信息表、学生选修科目表,大家可以复制执行即可。
SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for course-- ----------------------------DROP TABLE IF EXISTS `course`;CREATE TABLE `course` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '科目ID', `name` varchar(50) NOT NULL COMMENT '科目名称', `teacher` varchar(50) NOT NULL COMMENT '授课教师', `credit` int NOT NULL COMMENT '科目学分', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='科目表';-- ------------------------------ Records of course-- ----------------------------BEGIN;INSERT INTO `course` VALUES (1, '语文', '张老师', 100);INSERT INTO `course` VALUES (2, '数学', '王老师', 100);COMMIT;-- ------------------------------ Table structure for score-- ----------------------------DROP TABLE IF EXISTS `score`;CREATE TABLE `score` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '成绩ID', `student_id` int NOT NULL COMMENT '学生ID', `course_id` int NOT NULL COMMENT '科目ID', `score` int NOT NULL COMMENT '成绩', PRIMARY KEY (`id`), KEY `student_id` (`student_id`), KEY `course_id` (`course_id`), CONSTRAINT `score_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`), CONSTRAINT `score_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生成绩表';-- ------------------------------ Records of score-- ----------------------------BEGIN;INSERT INTO `score` VALUES (1, 1, 1, 90);INSERT INTO `score` VALUES (2, 1, 2, 95);INSERT INTO `score` VALUES (3, 2, 1, 100);INSERT INTO `score` VALUES (4, 2, 2, 99);COMMIT;-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '学生ID', `name` varchar(50) NOT NULL COMMENT '学生姓名', `gender` varchar(10) NOT NULL COMMENT '学生性别', `birthday` date NOT NULL COMMENT '学生生日', `address` varchar(100) NOT NULL COMMENT '学生住址', `phone` varchar(20) NOT NULL COMMENT '学生联系方式', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生信息表';-- ------------------------------ Records of student-- ----------------------------BEGIN;INSERT INTO `student` VALUES (1, '小明', '男', '2023-06-16', '广州', '13724889158');INSERT INTO `student` VALUES (2, '小羊', '女', '2023-06-16', '广州', '13800126000');COMMIT;-- ------------------------------ Table structure for student_course-- ----------------------------DROP TABLE IF EXISTS `student_course`;CREATE TABLE `student_course` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '关系ID', `student_id` int NOT NULL COMMENT '学生ID', `course_id` int NOT NULL COMMENT '科目ID', PRIMARY KEY (`id`), KEY `student_id` (`student_id`), KEY `course_id` (`course_id`), CONSTRAINT `student_course_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`), CONSTRAINT `student_course_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生选修科目表';-- ------------------------------ Records of student_course-- ----------------------------BEGIN;INSERT INTO `student_course` VALUES (1, 1, 1);INSERT INTO `student_course` VALUES (2, 1, 2);INSERT INTO `student_course` VALUES (3, 2, 1);INSERT INTO `student_course` VALUES (4, 2, 2);COMMIT;SET FOREIGN_KEY_CHECKS = 1;
认识几个功能菜单
当你选择好对应的数据库表后,你会发现有这么 4 个菜单:
自然语言转 SQL:简单来说就是 使用中文描述,软件自动帮我们生成 SQL;SQL 解释:SQL 语句转中文解释(有的时候我们会遇到非常复杂的 SQL,有的甚至成百上千行的SQL,要读懂这段 SQL 语句可能需要几个小时甚至几天时间。 通过 Chat2DB就可以快速了解这段 SQL 的含义)有的时候我们写了一段 SQL 性能不好,Chat2DB 也可以帮我们优化 SQL,提升查询性能不同数据库 SQL 语法有略微的差异,也可以通过 Chat2DB 让它帮我们去转换这个 SQL 的语法(比如 MySQL 转 SQLServer 语句)
开始测试
自然语言转 SQL
终端输入查询学生小明的各科目成绩,包括科目名称、教师名字段,点击自然语言转 SQL。
在弹出的选择表中选择本次查询所涉及到的几个表:course、score、student。
最终生成如下:
SQL 解释
那么,我们使用这段生成的 SQL 语句反过来看看 Chat2DB 会帮我们解释成什么。选中生成的 SQL 点击 SQL 解释,输出如下:
--- BEGIN ---SELECT course.name, course.teacher, score.score FROM score INNER JOIN course ON score.course_id = course.id INNER JOIN student ON score.student_id = student.id WHERE student.name = '小明'--- 解释SQL ---这个SQL查询语句的作用是从三个表中选择课程名称、教师和分数,其中分数是从score表中获取的。通过INNER JOIN将score表与course表和student表连接起来,连接条件是score表中的course_id等于course表中的id,同时score表中的student_id等于student表中的id。最后,通过WHERE子句筛选出学生名字为“小明”的记录。--- END ---
SQL 优化
依旧使用这段生成的 SQL 看看 Chat2DB 会给我们一些什么优化建议:
--- BEGIN ---SELECT course.name, course.teacher, score.score FROM score INNER JOIN course ON score.course_id = course.id INNER JOIN student ON score.student_id = student.id WHERE student.name = '小明'--- SQL优化 ---优化建议:1. 添加索引:在score表的course_id和student_id列上添加索引,以提高JOIN操作的效率。2. 避免使用通配符:在WHERE子句中避免使用通配符,如使用LIKE '%小明%',会导致全表扫描,影响查询性能。3. 使用EXISTS替代INNER JOIN:如果只需要查询小明的成绩,可以使用EXISTS子查询替代INNER JOIN,可以减少JOIN操作的次数,提高查询效率。优化后的SQL语句如下:SELECT course.name, course.teacher, score.score FROM score INNER JOIN course ON score.course_id = course.id WHERE EXISTS (SELECT 1 FROM student WHERE student.id = score.student_id AND student.name = '小明')--- END ---
使用总结
通过上面的简单实用,相信大家已经知道 Chat2DB 的使用方法。其次,通过一些简单的命令,它也能帮我们生成我们想要的 SQL 语句。博主测试过一些复杂的业务 SQL 可能暂时还无法给到很正确提示,在 SQL 优化方面也给出了一定的建议,博主感觉这些建议都是可以供参考的,当然实际的情况还是需要根据我们的业务场景来决定。
后续功能
目前该开源项目还会提供支持环境隔离、支持团队协作,支持创建、修改、删除表,支持非关系型数据库的迭代版本,后续有新的功能版本,博主再来和大家分享,一下是项目的未来规划:
链接:blog.csdn.net/lhmyy521125/article/details/131247494
标签: #开源免费的数据库客户端