SQL server迁移至Mysql总结

迁移过程

程序改造和数据库迁移

迁移类型

在线迁移和离线迁移

迁移工具

可以使用SQL Server Management Studio,里面加上ODBC驱动程序操作Mysql。

SQL OPENQUERY用法

OPENQUERY函数,远程执行数据库增删改查。

eg:

  1. OPENQUERY([MYSQL-STAGE-STAGE], 'select * from etl_migrate_log where table_name= ''notes'';')

     第一个参数为配置好的链接服务器名称,第二个参数为要执行的MySQL命令

增删改查

--1.SELECT语句
SELECT *  FROM  OPENQUERY([MYSQL-STAGE-STAGE], 'select * from etl_migrate_log where table_name= ''notes'';');
--或
SELECT * FROM OPENQUERY([MYSQL-STAGE-STAGE], 'select * from etl_migrate_log ') WHERE table_name= 'notes'
 
--2.INSERT语句,INTO可省略
INSERT INTO OPENQUERY([MYSQL-STAGE-STAGE],'select table_name,endtime from etl_migrate_log ;')  VALUES( 'notes', now())
 
--3.UPDATE语句
UPDATE OPENQUERY([MYSQL-STAGE-STAGE], 'select table_name, endtime from etl_migrate_log where table_name= ''notes''') SET endtime = now()
 
--4.DELETE语句,FROM可省略
DELETE FROM OPENQUERY([MYSQL-STAGE-STAGE], 'select * from etl_migrate_log where table_name= ''notes''')
--或
SET @tablename= 'ls'
DELETE FROM OPENQUERY([MYSQL-STAGE-STAGE], 'select * from etl_migrate_log') WHERE table_name= @tablename

结构和语法区别

  1. ,时间戳timestamp数据类型

    sqlserver和mysql都有timestamp数据类型,但是两者的实现区别很大。

    在sql server中,该类型表明数据库中数据修改发生的相对顺序,它的值本质上是一个bigint类型的一个递增数字,与时间和日期无关, 该数字在数据库实例级别不会重读。

    在mysql中,该类型表明数据库中数据修改发生的相对顺序, 它的本质是一个时间,该时间再表级别都有可能重复。

    最坑的是该类型的字段是我们业务的关键字段,用于用户从服务器上拉去数据。

    最后的解决办法,该字段的数据按照bigint的值从sql server迁移到mysql,mysql在添加一个timastamp数据类型,程序添加判断机制。

    2,字符集和emoji表情

    sqlserver中默认直接可以保存emoji表情。开始迁移过程没有注意到该问题。历史数据迁移完毕以后,才发现该问题。

    mysql中需要使用utf8mb4来保存此数据。

    3,索引不能超过大小

    mysql中索引长度不能超过767字节!!!

    这个只能是优化数据类型。

    比如有的字段保存设备的macid,数据类型是varchar(50),经过调研发现macid只有12位,可以修改成varchar(12)。

    再有int是否可以改为tinyint或者smallint、是否可以用latin1代替utf8(当然最好是都统一使用utf8)等

    这里主要就是数据类型的优化,稍后会有专门的文章来介绍数据类型优化。

    4,varchar(max)类型

    mysql没有该数据类型,mysql中需要使用text类型。

    5,常见的不兼容的语法

    sqlserver中一个使用top取前几行的数据,mysql使用limit完成此功能。这个相对还比较好修改。

    两者使用临时表的方法也不一样。

    6,CTE递归

    在存在递归查询的操作里,sqlserver有一个非常棒的功能就是CTE递归查询。

    7,over窗口查询

    sqlserver中的over窗口函数也是我非常喜欢的一个功能,比如分组排序、分组范围等查询。

猜你喜欢

转载自blog.csdn.net/cheerlh2018/article/details/106686026