數據庫 SQL Server 到 MySQL 遷移方法總結

      網友投稿 1249 2025-04-01

      最近接手一起老項目數據庫 SQL Server 到 MySQL 的遷移。因此遷移前進行了一些調查和總結。下面是一些?SQL Server 到 MySQL 的遷移方法。


      1. 使用 SQLyog 遷移

      具體方法可以參加:http://www.cnblogs.com/gaizai/p/3237907.html

      優點:該遷移方法很簡單,靈活,遷移時,可以進行字段的修改,比如在sql server中原來是datetime,然后遷移到mysql時你可以配置成timestamp;

      成功率很高;

      缺點:遷移很慢!這是該方法最大的缺點,如果表的數據量達到幾十萬行,甚至幾百萬行,你會發現遷移起來真的很慢。明顯比其他遷移方法慢很多。

      2. 使用 powerdesigner 和 sql server 的腳本導出功能 來遷移

      第一步:該方法首先使用 powerdesigner,對sql server數據庫,進行逆向工程,得到E-R圖,然后生成MySQL的建表語句。完成數據庫結構的遷移;

      當然表結構的遷移,不使用powerdesigner一樣也是可以的。比如我將表結構導出成語句,然后手動進行修改,然后在MySQL中運行,也是一樣的;

      第二部:然后使用 sql server的工具 SSMS,將sql server數據庫中的表的數據,導出成insert語句,每個表對應導出一個文件,然后對文件進行一些處理,

      然后導入到MySql數據庫中。

      具體的對 sql server 導出的sql文件的處理方法,參見:http://www.cnblogs.com/digdeep/p/4822499.html

      3. 使用Oracle MySQL Server 官方的 workbeach 工具進行遷移

      mysql官方有兩篇 sql server 遷移到 mysql的指導手冊,可以參考:

      http://www.mysql.com/why-mysql/white-papers/guide-to-workbench-migration-wizard/

      http://www.mysql.com/why-mysql/white-papers/guide-to-migrating-from-sql-server-to-mysql/

      上面的連接中可以下載到pdf文件,安裝文件的說明,使用 workbeach 工具就能進行遷移。因為 workbeach 有30天的使用期,所以完全不需要擔心;

      在workbench 連接sql server時,用戶需要有?view any database?的權限。不然workbench無法訪問sql server的表結構的元數據,從而無法進行遷移。

      還有使用 Navicat 來進行遷移的方法,方法和 SQLyog 是類似的。

      4. 三種方法比較

      方法一只適合數據量小的遷移方法,如果數據量大,遷移時間短,基本是不適合的;

      方法二是比較好的方法,缺點就是sql server導出的insert腳本中 datetime字段和decimal需要自己寫代碼進行轉換,稍微有點麻煩;

      第三種方法應該是最佳的選擇,比較簡單,速度也快,又不需要自己進行字段的處理。

      數據庫 SQL Server 到 MySQL 遷移方法總結

      所以對于數據量比較大的情況,應該選擇方法三或者方法二。

      5. 遷移需要注意的一些問題

      sql server 在向 mysql 遷移時,需要注意的一些問題,在連接 http://www.mysql.com/why-mysql/white-papers/guide-to-migrating-from-sql-server-to-mysql/ 的文檔中都有說明。下面是一些具體的注意事項:

      1)唯一索引的不同,sql server的唯一索引的字段只能允許存在一個null值,而mysql,一直oracle中唯一索引對應的字段都允許存在多個null值;

      2)ifnull 與 isnull ,sql server使用的是 ifnull,而mysql 中要使用 isnull:

      ??????update?model_model? ??????set?accuracy_num=ifnull(accuracy_num,0)?+?1,?accuracy_total=ifnull(accuracy_total,0)?+?#accuracyTotal:DECIMAL#? ??????where?id=#id:BININT#?and?status=1??

      3)所有的分頁sql都需要重寫:

      SQL server的分頁(使用的是?row_number() over(......)):

      ???select?*?from?(select?row_number()?over(order?by?c.choise_time?desc)?as?rowid,? ????????c.id?as?id,m.gid?as?gid,m.member_id?as?memberId,mb.g_Member_Nickname?as?memberName, ????????mb.g_Member_Mobile?as?memberMobile,c.user_id?as?userId, ????????...?... ????????m.order_num?as?orderNum,m.model_satisfaction?as?modelSatisfaction,m.height?as?height, ????????m.professional_type?professionalType ????from?model_model?m? ????inner?join?model_choise?c?on?m.id=c.model_id ????inner?join?Members?mb?on?mb.g_MemberID=m.member_id ????where??m.status=1???? ???????? ????????????c.user_id?=?#userId:BIGINT#???????? ???????? ????????????c.status?=?#status:INTEGER#???????? ???? ????)?tt?where?rowid?>=?#minRow:INTEGER#?and?rowid?<=?#maxRow:INTEGER#??

      用mysql重寫:

      ???select? ????????c.id?as?id,m.gid?as?gid,m.member_id?as?memberId,mb.g_Member_Nickname?as?memberName, ????????mb.g_Member_Mobile?as?memberMobile,c.user_id?as?userId, ????????m.id?as?modelId,c.status?as?status, ????????c.pay_amount?as?payAmount,c.accuracy?as?accuracy, ????????...?... ????????m.order_num?as?orderNum,m.model_satisfaction?as?modelSatisfaction,m.height?as?height, ????????m.professional_type?professionalType ????from?model_model?m? ????inner?join?model_choise?c?on?m.id=c.model_id ????inner?join?Members?mb?on?mb.g_MemberID=m.member_id ????where??m.status=1???? ???????? ????????????c.user_id?=?#userId:BIGINT#???????? ???????? ????????????c.status?=?#status:INTEGER#???????? ???? ????order?by?c.choise_time?desc ????limit?#minRow:INTEGER#,?#maxRow:INTEGER#??

      4)存儲過程的遷移是最麻煩的:

      存儲過程的語法存在很大的不同。

      http://www.mysql.com/why-mysql/white-papers/guide-to-migrating-from-sql-server-to-mysql/ 的文檔中有一些說明。

      下面是一些mysql存儲過程的參考文章:

      http://www.cnblogs.com/digdeep/p/4818660.html

      http://www.cnblogs.com/digdeep/p/4814020.html

      MySQL SQL Server SQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel查找函數:Mlookup函數的高級用法
      下一篇:如何實現工廠生產自動化?工廠生產自動化操作流程
      相關文章
      亚洲人成自拍网站在线观看| 亚洲乱色熟女一区二区三区蜜臀| 亚洲精品无码专区在线播放| 亚洲免费中文字幕| 青青草原精品国产亚洲av| 亚洲高清专区日韩精品| 亚洲色偷偷综合亚洲AVYP| 久久精品国产亚洲一区二区三区| 国产亚洲福利一区二区免费看| 亚洲欧美国产国产一区二区三区| 国产午夜亚洲精品| 亚洲色中文字幕在线播放| 伊人久久五月丁香综合中文亚洲| 亚洲首页国产精品丝袜| 亚洲国产熟亚洲女视频| 亚洲综合av一区二区三区不卡| 亚洲中文字幕无码中文字| 一本色道久久88亚洲精品综合| 亚洲精品宾馆在线精品酒店| 亚洲αⅴ无码乱码在线观看性色| 亚洲精品久久无码av片俺去也| 亚洲精品精华液一区二区| 久久亚洲AV成人无码国产电影| 亚洲av日韩av欧v在线天堂| 亚洲免费视频一区二区三区| 中文字幕第一页亚洲| 亚洲精品无码午夜福利中文字幕 | 亚洲午夜电影在线观看高清| 亚洲av永久无码精品三区在线4| 亚洲人成网国产最新在线| 亚洲精品永久在线观看| 五月婷婷亚洲综合| 国产亚洲精品不卡在线| 亚洲成A人片777777| 亚洲精品视频免费看| 2020久久精品亚洲热综合一本| 亚洲成a人无码亚洲成av无码| www.亚洲精品.com| 亚洲午夜久久久久久久久久| 亚洲国产精品免费视频| 亚洲国产精品一区二区久|