1. 程式人生 > >在項目中遷移MS SQLServer到Mysql數據庫,實現MySQL數據庫的快速整合

在項目中遷移MS SQLServer到Mysql數據庫,實現MySQL數據庫的快速整合

mage 操作 info 支持 文件選擇 需要 並且 在服務器 重要

在開發項目的時候,往往碰到的不同的需求情況,兼容不同類型的數據庫是我們項目以不變應萬變的舉措之一,在底層能夠兼容多種數據庫會使得我們開發不同類型的項目得心應手,如果配合快速的框架支持,那更是錦上添花的舉措。我開發的項目或者框架,采用了微軟企業庫Enterprise Library的模塊,傾向於支持多種數據庫,也為我們開發不同類型的項目提供非常方便、快速、統一的處理方式。一般常規的數據庫包括MS Server、Oracle、MySQL、PostgreSQL、SQLite、DB2、國產達夢等數據庫,本篇隨筆主要介紹如何實現從MS SQLServer到Mysql數據庫,並為不同數據庫類型添加實現底層的解決思路。

1、SQLServer數據庫導出到MySQL

如果我們已經基於SQL Server進行了開發,並且具有很多基礎的數據庫數據了,那麽我們可以利用SQL Server導出到MySQL數據庫中,這種是我們常見的一種開發方式,畢竟基於SQLServer數據庫開發起來會比較快速一些。

SQL Server數據庫的管理工具是SQL Server Management Studio;而Mysql數據庫的管理工具則推薦使用Navicat,這是一款非常強大好用的管理工具。

首先我們使用Navicat建立自己一個空白的Mysql數據庫,用來承載SQL Server 的數據導出需要。

例如我們創建一個和SQL Server數據庫同名的MVCWebMisTest數據庫,並且設置它的字符集為默認或者UTF8的編碼方式,如下所示。

技術分享圖片

然後利用SQL Server Management Studio進行數據的直接導出,選擇【任務】【導出數據】,如下所示。

技術分享圖片

然後在彈出的數據庫裏面選擇導入的數據源和目標,選擇導入的數據源界面如下所示。

技術分享圖片

然後在目標裏面選擇Mysql的驅動,填入相應的信息,如下界面所示。

技術分享圖片

然後在下一步選擇需要導出的表信息。

技術分享圖片

很不幸,這種方式操作數據庫的導出操作沒有辦法成功。

技術分享圖片

2、從Navicat中導入MS SQLServer數據庫數據

既然通過SQL Server Management Studio無法導入數據到Mysql數據庫中,那麽我們嘗試下Mysql的數據庫管理工具Navicat,它也有數據傳輸(導入導出)的功能。

我們在剛才建好的數據庫上面右鍵調出對應的【數據傳輸】功能,然後設置好數據的源和目標,如下所示。

技術分享圖片

執行數據傳輸操作,順利完成,非常強大和方便,而且沒有任何錯誤。如下界面所示。

技術分享圖片

檢查數據庫導入的數據表和數據,沒有問題。

技術分享圖片

3、Mysql數據庫之間的傳遞

那麽如果我們需要部署到服務器,就需要把當前的Mysql數據庫傳遞(或者還原)到服務器的MySQL數據庫中,一般來講,我們利用Mysql的Navicat管理工具就可以實現數據導出的sql文件裏面,然後在服務器裏面使用反向操作即可還原數據庫成功的了。

技術分享圖片

轉儲SQL文件成功如下界面所示。

技術分享圖片

而在服務器的上面,我們可以利用Navicat的運行SQL文件即可還原Mysql數據庫了。

技術分享圖片

技術分享圖片

運行的結果如下所示。

技術分享圖片

當然有時候也會發現存在一些表依賴引用的情況發生,不知道是不是Navicat版本出來的問題,不過如果有這個問題,只要不是編碼的問題,都好解決,打開sql文件把創建表的順序調整一下就可以了,我就碰到過這種極端的情況,把一些依賴表調整到前面來就可以順利導入數據了。

4、底層的Mysql數據庫支持

底層支持多種數據庫,對我們開發不同類型的項目有著非常重要的支撐作用,我們不知道客戶具體環境會選擇那種數據庫,如果我們擴展不同的數據庫非常方便和迅速,無疑會給我們提供很好的控制力和信心。

技術分享圖片

采用了微軟企業庫Enterprise Library作為我們底層的數據庫訪問模塊後,對於多種數據庫的訪問操作,就會統一采用這個企業庫的數據庫訪問對象,操作起來非常一致,為了對不同數據庫的常規增刪改查等一些操作進行進一步的封裝,已達到簡化代碼的目的,因此我們可以為每個不同的數據庫定義一個數據訪問操作基類,以便實現一些不同數據庫差異性的處理,但是它們還是有一個共同的數據訪問基類。

采用不同的數據庫,我們需要為不同數據庫的訪問層進行生成處理,如為SQLServer數據的表生成相關的數據訪問層DALSQL,裏面放置各個表對象的內容,不過由於采用了相關的繼承類處理和基於數據庫的代碼生成,需要調整的代碼很少。

技術分享圖片

我們為了不同的數據庫準備了不同的數據庫實現,不過也僅僅是特殊的接口調用而已,一般常規的增刪改查以及分頁等普通接口,全部交由基類接口實現即可。

如對於權限管理系統這個常規框架基礎模塊,多數據庫的支持就非常必要的,它的數據庫訪問層如下所示。

技術分享圖片

不同的數據庫訪問層實現也是相差無幾的,一般可以利用代碼生成工具進行快速生成後,增加自定義接口實現即可。

技術分享圖片

而對於不同數據庫的支持,直接復制過去,改動一下數據庫實現層的命名空間和訪問層的基類就可以了,如果有自定義SQL腳本上的差異,可以適當的修改即可。一般從一種數據庫支持擴展到另外一種數據庫支持,無非就是復制過去,進行調整一下即可,非常方便快速,這個就是整體框架支持的魅力和效率所在。

這樣整合多種數據庫支持的底層後,整個數據訪問的架構設計如下所示。

技術分享圖片

有了這些底層支持,我們在配置文件選擇不同的數據庫的時候,選擇性的保留其中一種數據庫配置信息即可。下面是各種數據庫支持的配置信息參考,一般保留一種即可。

技術分享圖片

在項目中遷移MS SQLServer到Mysql數據庫,實現MySQL數據庫的快速整合