阿里巴巴开源 Chat2DB v1.0.11 初体验

大家好,我是不才陈某~

什么是 Chat2DB

Chat2DB 是一款有开源免费的多数据库客户端工具,支持 Windows、MAC 本地安装,也支持服务器端部署,Web 网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比 Chat2DB 集成了 AIGC 的能力,能够将自然语言转换为 SQL,也可以将 SQL 转换为自然语言,可以给出研发人员 SQL 的优化建议,极大地提升人员的效率,是 AI 时代数据库研发人员的利器。未来即使不懂SQL的运营业务也可以使用快速查询业务数据、生成报表能力。

下载安装

项目 Releases 地址:

https://github.com/alibaba/Chat2DB/releases

大家根据自己的电脑环境选择对应版本即可,博主这里使用的 MacOS X64(Intel芯片)版本。

安装配置

正常双击打开拖动到 Applications 进行安装,安装完成后配置 Chat2DB AI SQL 功能。找到设置,填写 Open AI 的密钥(登录 OpenAI 官网,右上角View API keys 创建即可)。

975c3c8c75b6a85a5a0f160160b3310c.png

创建完成后,在设置中输入刚刚获取的 OpenAI 密钥。

c01d7bb948f17a60a016cef6e5027881.png

至此,我们已经完成了基础的配置,下面我们来感受一下 Chat2DB。

Chat2DB 初体验

配置数据源

这里以 MySQL 为例,点击加号(+)新建数据源。

83a1cb9b041ac3ef6908bf62aba4828b.png

填写相关链接信息,选择数据库,这里 test 为例:

346e5ea173c0b9a8705c02f4097b8c69.png

目前 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 个菜单:

3f2a216839ae53b43aae2d459f574ca5.png
  • 自然语言转 SQL:简单来说就是 使用中文描述,软件自动帮我们生成 SQL;

  • SQL 解释:SQL 语句转中文解释(有的时候我们会遇到非常复杂的 SQL,有的甚至成百上千行的SQL,要读懂这段 SQL 语句可能需要几个小时甚至几天时间。通过 Chat2DB就可以快速了解这段 SQL 的含义)

  • 有的时候我们写了一段 SQL 性能不好,Chat2DB 也可以帮我们优化 SQL,提升查询性能;关注公众号:码猿技术专栏,回复关键词:1111 获取阿里内部Java性能调优手册!

  • 不同数据库 SQL 语法有略微的差异,也可以通过 Chat2DB 让它帮我们去转换这个 SQL 的语法(比如 MySQL 转 SQLServer 语句)

开始测试

自然语言转 SQL

终端输入查询学生小明的各科目成绩,包括科目名称、教师名字段,点击自然语言转 SQL。

bf60d09750514a00a1c2251197b1991b.png

在弹出的选择表中选择本次查询所涉及到的几个表:course、score、student。

0cfb5866008d2e69a97ae37ac664cd7e.png

最终生成如下:

e416b8f5987c8efdf4dd0f93127c282c.png

SQL 解释

那么,我们使用这段生成的 SQL 语句反过来看看 Chat2DB 会帮我们解释成什么。选中生成的 SQL 点击 SQL 解释,输出如下:

34adca36ca4eba6c1f6f0ca3ebe28473.png
--- 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 会给我们一些什么优化建议:

9b73164dfbdf343f245fd3cbc6103a00.png
--- 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 优化方面也给出了一定的建议,博主感觉这些建议都是可以供参考的,当然实际的情况还是需要根据我们的业务场景来决定。

后续功能

目前该开源项目还会提供支持环境隔离、支持团队协作,支持创建、修改、删除表,支持非关系型数据库的迭代版本,后续有新的功能版本,博主再来和大家分享,一下是项目的未来规划:

41c7a65c4dbfcf32452bda3321dd843b.png

来源:blog.csdn.net/lhmyy521125/article/details/131247494

最后说一句(别白嫖,求关注)

陈某每一篇文章都是精心输出,如果这篇文章对你有所帮助,或者有所启发的话,帮忙点赞、在看、转发、收藏,你的支持就是我坚持下去的最大动力!

  1. 点击阅读:《Spring Cloud 进阶》

  2. 点击阅读:《Spring Boot 进阶》

  3. 点击阅读:《Mybatis 进阶》

关注公众号:【码猿技术专栏】,公众号内有超赞的粉丝福利,回复:加群,可以加入技术讨论群,和大家一起讨论技术,吹牛逼!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chinese-LLaMA-Alpaca:优秀的开源中文语言模型预训练工具

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 万字干货:ChatGPT的工作原理 2023年创业(有创业想法)必读手册 ChatGPT等让你效率倍增的22个AI工具 ChatGPT调研…

GPT-4与人工智能的未来-微软CTO对话比尔·盖茨

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 无需翻墙,ChatGPT4直接用:无限制次数、字数 【免费下载】2023年2月份热门报告合集 ChatGPT调研报告(仅供内部参考) 文心一言、GPT3.5及GPT…

当危言耸听的言论照进现实:7800 个工作岗位危矣,AI 对大厂发起“进攻”?...

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 万字干货:ChatGPT的工作原理 2023年创业(有创业想法)必读手册 ChatGPT等让你效率倍增的22个AI工具 ChatGPT调研…

AIGC时代的多模态知识工程思考与展望

内容简介:ChatGPT的火爆出圈使得AI生成(AIGC)技术受到了全社会前所未有的广泛关注。此消彼长之下,传统的知识工程遭受了诸多质疑。在多模态智能领域,AIGC的能力不断提升,多模态知识工程工作应该何去何从&am…

启元世界CEO袁泉:能力涌现不只与模型大小相关,AGI开启元宇宙实现之路 | 中国AIGC产业峰会...

衡宇 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT和GPT-4引发全球地震,很多人都在思考一个问题:OpenAI的成功路径是什么? 在中国AIGC产业峰会现场,启元世界创始人兼CEO袁泉给出了他的答案,它很好地融合了三大时代红利。…

大语言模型综述全新出炉:从T5到GPT-4最全盘点!

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 万字干货:ChatGPT的工作原理 2023年创业(有创业想法)必读手册 ChatGPT等让你效率倍增的22个AI工具 ChatGPT调研…

2023学会Python爬虫,你也能月薪过万!

Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库。它已经成为继Java、C之后的第三大语言,相对于其他语言,它的特点是:简单易学、可移植、可扩展、可嵌入、 丰富的库、免费开源等, Python难度低&am…

ListenData:如何使用 ChatGPT 进行数据科学

在本文中,我们将探讨作为数据科学家如何使用 ChatGPT 来增强您的数据科学项目。ChatGPT 是一个功能强大的工具,可以在工作的各个方面为您提供帮助,从探索和分析数据到生成见解以及帮助您进行编码和故障排除。它还可以帮助您更快地学习数据科学…

Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond

LLM的系列文章,针对《Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond》的翻译。 在实践中驾驭LLM的力量——ChatGPT及其后的研究综述 摘要1 引言2 模型实用指南2.1 BERT风格的语言模型:编码器-解码器或仅编码器2.2 GPT风格…

外资企业可以在中国上市吗

一、外资企业可以在中国上市吗 外资企业依照相关法律规定是可以在中国上市的。 需要满足的条件: (一)股票已公开发行; (二)公司股本总额不少于3000万元; (三)公开发行的股…

一种pluntUML实时渲染图片的方法

最近接触到pluntUML,一个很神奇的uml工具,可以非常方便地画流程图、序列图等。 其使用方法,按照从网上检索的文章中,大都是将pluntUML配合文件编辑器(sublime,vscode)使用,并且需要设…

ChatGPT的打字回复效果,原理是什么?我带你们实现!

当下圈内比较火的非 chatGPT 莫属了。 chatGPT 回复效果 相信使用过 chatGPT 的朋友,都会看到,当你提问一个问题时,chatGPT 会一字一字地给你展示出来,而不是一次性给你返回,如下图: 这样做的好处&#xff…

clickhouse数据去重函数介绍(count distinct)

clickhouse提供了许多的去重函数,有精确去重的以及非精确去重的,下面介绍下两种 非精确去重函数:uniq、uniqHLL12、uniqCombined 精确去重函数:uniqExact、groupBitmap 测试数据量:2000w SELECT count(id) from tab…

消息幂等(去重)通用解决方案,真顶!

作者 | 薛定谔的风口猪 来源 | https://jaskey.github.io/blog/2020/06/08/rocketmq-message-dedup/ 消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是…

TP6关联统计无法去重的解决方案

在tp6中官方手册跟源码中是没办法做到去重关联统计的,因为源代码中的withCount方法,默认是以“*”进行统计。当我们想要统计类型有多少,而不是数量有多少的时候就会非常麻烦。 这时候需要修改源码,将默认的“*”,改成传…

postgreSql根据多个字段去重详细流程

postgreSql根据多个字段去重详细流程 这是测试表的建标语句,需要的可以拿去用。 CREATE TABLE "public"."class_name" ("id" int4 NOT NULL DEFAULT nextval(id::regclass),"class_no" varchar(50) COLLATE "pg_cat…

mysql去重函数:DISTINCT ,与GROUP_CONCAT结合去重

mysql去重函数:DISTINCT ,与GROUP_CONCAT结合 创建表语法distinct多字段去重DISTINCT 结合 group 统计实例 创建表 DROP TABLE IF EXISTS qipa_shop; CREATE TABLE qipa_shop (price varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci N…

tp6 count distinct统计时根据字段去重

代码: AppointmentModel::field([identity])->count(distinct identity)生成的sql: SELECT COUNT(DISTINCT identity) AS think_count FROM dg_appointment;下面是tp6手册内容 我尝试着这样写 发现生成的sql不对 AppointmentModel::distinct(tru…

oracle listagg如何去重

listagg去重 去重思路:利用listagg会忽略null值的特点 按ENTITY_GROUP_RRN 分组,用 listagg 分别合并 EQPT_ID 与 STATION_ID ,同时要求去重 表 T_TEST 数据如下: EQPT_IDENTITY_GROUP_RRNSTATION_IDTOOL-00110493721JITAI-1TO…

【数据去重】海量数据实时去重方案

文章目录 Prologue布隆过滤器去重什么是布隆过滤器实现的核心思想怎么理解 内嵌RocksDB状态后端去重引入外部K-V存储去重 Prologue 数据去重(data deduplication)是我们大数据攻城狮司空见惯的问题了。除了统计UV等传统用法之外,去重的意义更…