【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個小時的時間,感覺還是值得的吧。畢竟解決了自己的一些問題,心理還是有一點點成就感的,現在看數據庫之間的差異就沒有那么辛苦了。雖然打印出來是有一點丑,大家可以下載一下自己改良使用。

最后來一句:成就感,讓寫代碼不再那么枯燥。

 

謝謝大家觀看!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM