从 Oracle 迁移到 MySQL

1,891 阅读2分钟

迁移表结构

使用 Navicat 工具,可以轻松迁移,步骤如下:

  1. 新建一个用户,同步需要迁移的表结构(如果需要同步数据,则忽略这一步);
    • 新建用户:create user xxx identified by ppp;
    • 赋予权限:grant dba to xxx;
    • 点击 Navicat 菜单栏中的:工具 --> 结构同步,依照步骤输入即可
    • 比对数据库操作较慢,耐心等待~ image.png
      image.png
  2. 通过数据传输功能创建表结构
    • 点击 Navicat 菜单栏中的:工具 --> 数据传输,依照步骤输入即可
    • 如果 MySQL 中没有表,工具会自动创建 image.png
      image.png
      image.png
      至此,表结构就迁移完成啦~

迁移视图

视图迁移没有什么简单的方法,只能手动迁移,因为 Oracle 函数和 MySQL 函数不一致,还有语法也有区别。

这个是本人将 Oracle 环境迁移到 MySQL 环境中迁移视图时使用到的函数,并不全,后续会持续更新~

  1. 视图中 from 后面,Oracle 允许子查询,MySQL 不允许有子查询,可以将子查询额外建一个视图,然后在本视图中使用。需要注意的是:如果迁移到其他数据库上,使用转储 SQL 的方式时,可能有些视图会失败而没有创建(比如 A 视图中引用了 B 视图,在转储 SQL 文件中先创建 A 视图,此时 B 视图还不存在,进而导致 A 视图创建失败)。当然,不建议过多使用视图,尤其还有嵌套的情况;
  2. Oracle 中 nvl 函数对应 MySQL 的 ifnull;
  3. Oracle 中 wm_concat 函数对应 MySQL 的 group_concat;
  4. Oracle 中注释使用 --,MySQL 中使用 #;
  5. Oracle 中使用 to_number 函数转换为数字,MySQL 有三种方式:
    • 在字符串或者字符串字段后 +0 就可以转换为数字;
    • CAST('5.45' AS SIGNED) 转换为整数,CAST('5.45' AS DECIMAL(9,2)) 转换为浮点数;
    • CONVERT('67',SIGNED) 转换为整数,CONVERT('67.35',DECIMAL(9,2)) 转换为浮点数;
  6. Oracle 中使用 to_char 函数转换为字符串,MySQL 有三种方式:
    • 在数字或者数字字段后 +'' 转换为字符串;
    • CAST(123 AS CHAR) 转换为字符串;
    • CONVERT(123, CHAR) 转换为字符串;
  7. Oracle 中 decode 函数可以使用 MySQL 的 if,不过 if 函数功能没有 decode 强大,也可以使用 case when then [when then] [else] end;
  8. Oracle 中 trunc 函数可以很方便的处理日期,MySQL 中通过 date_format 函数,比如获取当月第一天 0 点:Oracle 中 trunc(sysdate, 'mm'),MySQL 中 DATE_FORMAT(sysdate(), '%Y-%m-01');
  9. Oracle 中获取服务器时间使用 sysdate 关键字,MySQL 中使用 CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE();
  10. Oracle 中使用 add_months 函数对应 MySQL 中的 date_add、date_sub;
  11. Oracle 中使用 to_char 函数转换日期为字符串,MySQL 中使用 date_format 函数,并且格式化的通配符也不一样:Oracle 中 yyyy-mm-dd hh24:mi:ss,MySQL 中 %Y-%m-%d %H:%i:%S;