MySQL表比较工具比较不同MySQL数据库的表结构差异
Posted 罗西施
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL表比较工具比较不同MySQL数据库的表结构差异相关的知识,希望对你有一定的参考价值。
一、需求来源
来源,其实也是自己开发的时候用到的。哈哈,公司交代了一个项目给我全权处理,也就是说我要设计数据库,写接口文档,参与开发,分配任务等等。
身边的开发人员项目经验比较少,于是我就上去主导项目了。后面带领团队一两周,到了测试环境预备的阶段。此时,我的数据库还没有完全设计完成。于是,我就把开发的数据库脚本导出到测试环境的数据库。
这样一来,问题就出来了。我如果修改了开发环境的表结构,还得同步测试环境。本来觉得手多操作一遍是可以的,但是人终究会犯错的。偶尔,修改开发表结构的时候,被其他事情打断了,我就忘记同步到测试环境。久而久之,两边的表结构就产生了很大的差异。全部清空吧,一百来张表,说多不多,说少也不少。
于是,我萌生了一种自己写一个跨库表比较工具的念头。
二、设计思路
1、获取数据库A和数据库B的所有表信息。
2、先进行表数量的比较 -> 获取出数据库A比数据库B少的表,数据库B比数据库A少的表。
3、遍历数据库A的每个表信息,获取每个表的字段信息
4、遍历数据库B的每个表信息,获取每个表的字段信息
5、进行字段数量的比较 -> 获取出数据库A的表比数据库B的表少的字段,数据库B的表比数据库A的表少的字段。
6、进行字段的详细比较 -> 获取出数据库A的表比数据库B的表字段不一样的比较(比如类型、索引、比较规则、字符格式、数字精度、注释等等),数据库B的表比数据库A的表字段不一样的比较
问题1:如何获取数据库下的所有表信息
回答:可以通过show tables;获取
问题2:如何获取表的所有字段信息
回答: a.通过show create table [表名];可以获取建表语句,不好处理,不满足我的需求。
b.通过desc [表名];可以获取表结构的一些基本信息,但无法获取字段的注释等更详细的信息,不满足我的需求。
c.通过select * from information_schema.COLUMNS where TABLE_SCHEMA = [库名] and TABLE_NAME = [表名];这个可以获取到比较完整的信息,满足条件。
我就采用c这种方案了。
剩下的就是集合之间的比较问题了,比较简单就不说了。
三、源码地址
https://github.com/telephone6/java-collection.git
位于项目的database/mysql-compare模块,修改属性后,运行cn.lxw.mysql.MainApp的main函数即可看到效果。
大家可以关注一下这个仓库,我会不定期传递一些有意思的代码到上面。
四、心得体会
整个思路+实现花费了2个小时的时间,感觉还是值得的吧。毕竟解决了自己的一些问题,心理还是有一点点成就感的,现在看数据库之间的差异就没有那么辛苦了。虽然打印出来是有一点丑,大家可以下载一下自己改良使用。
最后来一句:成就感,让写代码不再那么枯燥。
谢谢大家观看!
以上是关于MySQL表比较工具比较不同MySQL数据库的表结构差异的主要内容,如果未能解决你的问题,请参考以下文章