当前位置: 首页 > news >正文

迁移到MySQL的语法转换工具初步设计

这是学习笔记的第 2260 篇文章

读完需要

9

分钟

速读仅需7分钟

迁移到MySQL有很多原因,在基础准备工作中,源库的建表语句到MySQL建表语句的转换,不仅涉及到数据库间的语法,数据类型等差异,同时在SQL开发规范方向也有一些相应的规范,如何提高开发效率,同时使得开发规范更容易落地,向MySQL迁移的语法转换工具的作用就尤为重要。 

以下仅以SQL Server作为参考,对于Oracle等其他商业数据库也可以采用类似的处理方式。

经过调研分析和使用经验,计划支持两种使用模式。

模式1:指定数据库表

其中数据库的库,表,字段等元数据信息存储在运维系统元数据中,需要周期性和线上环境做字典信息同步,在接受到前端请求之后,提供一键转换接口,在这个处理过程中实现如下两个步骤:

1)构建出SQL Server侧的建表语句,该建表语句可以供前端显示和转换为MySQL语法作为参考。

2)将语句转换为符合MySQL基本规范的SQL语句,主要涉及数据类型,默认值,存储引擎,自增列值,字符集等。

在语法转换完成后,可以使用已有的SQL审核服务进一步审核修正,直至满足自动化上线的标(比如SQL打分为80分以上即可实现自动化上线)

 

 

模式2:输入SQL文本

输入SQL文本目前存在两类通用问题:

1)目前业务方使用的客户端工具存在差异,create table语句转换会生成两种风格的建表语句,第一类是create table xxxx,只有一条语句,第二类是:create table xxxxx,alter table xxxx add xxx;会有多条SQL语句

2)输入文本转换为MySQL文本的过程中,因为前端输入信息的差异在解析实现中复杂度较高。

 

在执行SQL文本时,会将SQL执行在虚拟数据库上面,执行完成后会同步推送SQL Servre侧的字典数据到运维系统的临时元数据存储中,然后在这个基础上,提供一键转换接口,在这个处理过程中实现如下两个步骤:

3)构建出SQL Server侧的建表语句,该建表语句可以供前端显示和转换为MySQL语法作为参考,此时建表语句会整合为独立的1条SQL.

4)将语句转换为符合MySQL基本规范的SQL语句,主要涉及数据类型,默认值,存储引擎,自增列值,字符集等。

在语法转换完成后,可以使用已有的SQL审核服务进一步审核修正,但是没有对接SQL自动化上线流程。

 

 

整个一套体系下来,需要设计哪几个接口,哪些是对内对外的服务就一目了然了。

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

订阅我的微信公众号“杨建荣的学习笔记”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。

   

近期热文

你可能也会对以下话题感兴趣。点击链接就可以查看。

相关文章:

  • MySQL空间报警后的一揽子解决方案
  • 超12万人申请北京积分落户,顺带分析了一波近年的数据
  • MySQL中insert阻塞问题的分析
  • MySQL数据延迟跳动的问题分析
  • 彻底取代Redis+数据库架构,京东618稳了!
  • 一个扭蛋的故事
  • 做一次完美的数据迁移
  • 招贤纳士-第16期,来自北京和成都的职位
  • MySQL安装部署,从半成品状态的改进
  • 从SQL Server到TiDB的架构设计及对数据中台的思考
  • 近期的状态小结和最近要做的一些事情
  • 一次完整的JVM堆外内存泄漏故障排查记录
  • 35岁老码农:老板,你看我还有机会吗?
  • 打算搞一个简单的开源项目mysql_lite
  • 打开黑盒:从 MySQL 架构设计出发,看它是如何执行一条 SQL 语句的?
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • conda常用的命令
  • java第三方包学习之lombok
  • nginx 配置多 域名 + 多 https
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SpingCloudBus整合RabbitMQ
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 阿里云购买磁盘后挂载
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 对JS继承的一点思考
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 机器学习中为什么要做归一化normalization
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端js -- this指向总结。
  • 入门级的git使用指北
  • 突破自己的技术思维
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $GOPATH/go.mod exists but should not goland
  • (2)(2.10) LTM telemetry
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (9)STL算法之逆转旋转
  • (备忘)Java Map 遍历
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)ORM
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net开发引用程序集提示没有强名称的解决办法
  • .net项目IIS、VS 附加进程调试
  • .Net中的集合
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [Android]常见的数据传递方式
  • [BJDCTF 2020]easy_md5
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]