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

前言

作为一名阿里巴巴开源项目的拥护者,从Chat2DB开源至今都有关注这个开源项目,因为之前的版本还存在较多BUG,暂时就没有分享,目前升级到 v1.0.11 版本后,我来谈谈我个人的一个使用感受

什么是Chat2DB

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

下载安装

项目Releases地址:
https://github.com/alibaba/Chat2DB/releases

Chat2DB新地址:
https://github.com/chat2db/Chat2DB

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

注意github上目前有重要公告Chat2DB将迁移到新地址: https://github.com/chat2db/Chat2DB

安装配置

正常双击打开拖动到Applications进行安装,安装完成后配置Chat2DB AI SQL功能,找到设置,填写Open Ai的密钥(登录OpenAi官网,右上角View API keys 创建即可),当然这里需要科学上网
在这里插入图片描述
创建完成后,在设置中输入刚刚获取的OpenAi密钥
在这里插入图片描述
至此一步我们已经完成了基础的配置,下面我们来感受一下Chat2DB

Chat2DB初体验

配置数据源

这里博主以mysql为例,点击加号新建数据源
在这里插入图片描述
填写相关链接信息 选择数据库,博主这里test为例
在这里插入图片描述

目前Mac版本选择了数据库test,但是实际上依旧还是将整个localhost的所有数据库列出来了,目前还是一个BUG,博主也在Issues建议官方不选择数据库默认所有,指定了数据库就单独显示某个库

准备测试数据

这里博主准备了一份测试数据表,分别是:科目表、学生成绩表、学生信息表、学生选修科目表,大家可以复制执行即可

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

后续功能

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

结语

以上就是博主对阿里巴巴开源Chat2DB v1.0.11版本的体验感受,如果你觉得有用希望点赞关注,以免错失后续版本的分享~ 谢谢大家

### Chat2DB 使用教程 #### 一、概述 Chat2DB 是一款功能强大的工具,旨在帮助开发者轻松实现聊天消息的数据库存储操作。它提供了 RESTful API 接口以及多数据库支持的功能[^1]。 以下是关于如何使用 Chat2DB 的具体指导: --- #### 二、环境准备 在开始之前,请确保满足以下条件: - 已经安装 Java 环境(建议版本 JDK 8 或更高)。 - 配置好所需的数据库服务(如 MySQL、PostgreSQL 等),并记录下连接参数(主机名、端口号、用户名、密码等)。 - 下载 Chat2DB 客户端或者克隆其源码仓库至本地开发环境中[^2]。 如果选择从官方 GitCode 地址获取资源,则可以执行如下命令来拉取最新版代码库: ```bash git clone https://gitcode.com/gh_mirrors/ch/Chat2DB.git ``` 对于希望了解更广泛社区动态的用户来说,也可以参考 GitHub 上该项目页面的内容更新情况[^3]。 --- #### 三、配置与启动 完成上述准备工作之后,按照下面步骤继续设置您的应用实例: 1. **修改配置文件** 找到项目的 `application.yml` 文件位置,在其中定义目标使用的数据源信息以及其他必要的初始化选项。例如针对单个MySQL 数据库存储设定样例如下所示: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/chat_db?useSSL=false&serverTimezone=UTC username: root password: your_password_here driver-class-name: com.mysql.cj.jdbc.Driver ``` 2. **运行应用程序** 如果您下载的是可执行 JAR 包形式分发的应用程序包,那么可以直接通过命令行方式调用来激活服务进程;如果是基于 IDE 开发模式调试的话,则只需正常构建项目即可自动部署内置 Tomcat 实例监听 HTTP 请求入口,默认情况下会绑定到 localhost 的某个指定端口上等待外部访问尝试。 --- #### 四、接口测试 一旦成功上线后就可以利用 Postman 或者 curl 命令发送 POST 方法请求向系统提交待处理的消息体样本进行验证效果评估了。假设当前正在监听于 http://localhost:8080 ,则可能的一个简单例子应该是这样的样子 : ```bash curl -X POST \ http://localhost:8080/api/v1/messages/save \ -H 'Content-Type: application/json' \ -d '{"content":"Hello, this is a test message.","senderId":1,"receiverId":2}' ``` 以上脚本片段将会把一条新创建出来的对话项持久化保存进入预先声明好的关系型表结构当中去。 另外值得注意的一点就是考虑到安全性方面因素考量,强烈鼓励最终使用者考虑采用官方所提供的桌面级图形界面管理解决方案——即 Chat2DB Client 来代替直接暴露公网 IP 给第三方远程操控风险较高的做法。 --- ### 总结 综上所述,Chat2DB 不仅具备易用性和灵活性的特点,还特别注重保障用户的隐私权及资料保护措施落实到位。无论是个人爱好者还是企业团队都可以从中受益匪浅。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micro麦可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值