Oracle向MySQL 迁移相关事项

从Oracle移植到MySQL主要有六个方面的内容需要移植,一是表Table,包括表结构和数据,二是触发器Trigger,三是存储过程Procedure,函数function和包Package,四是任务Job,五是用户等其他方面的移植,六是具体应用程序通过SQL语句访问时的细节差异克服。

一、表的移植

这个部分的移植是最容易用工具实现的部分,因为很多MySQL的图形管理工具都自带这样的移植工具,比如SQLYog,MySQL Administrator等。但是,这些工具的移植能力各有不同,对字段类型转换﹑字符集等问题都有自己的处理方式,使用时请注意。

笔者使用“SQLYog Migration Toolkit”工具按提示步骤移植后,表的主要结构和数据将成功移植,主要包括表的字段类型(经过映射转换,比如number会转换为double,date转换为timestamp等,请小心处理日期字段的默认值等),表的主键,表的索引(Oracle的位图索引会被转成BTree索引,另外表和字段的注释会丢失)等信息。需要特别注意的是,Oracle的自增字段的处理。

大家知道,Oracle通常使用序列sequence配合触发器实现自增字段,但是MySQL和SQL Server等一样,不提供序列,而直接提供字段自增属性。所以,请把Oracle里面的自增字段实现直接改为MySQL的字段属性,而且,这个字段必须是主键(key)并且不能有默认值。

还有一个问题,如果您的应用要直接使用Oracle的某个序列,那么您只能在MySQL里面模拟实现一个,具体方法就是利用MySQL的自增字段实现的。

二、触发器的移植

首先,MySQL在6.0以后才支持触发器!

触发器的移植没有现成工具,因为两者之间的语法差异较大,您只能通过手工对照着原来的逻辑一个一个添加。

这里要说明一下,MySQL的SQL过程语法和Oracle PL/SQL大致相同,但还是有些细微差别:1.变量声明Declare部分,在Oracle中Declare语句位于Begin之前,在MySQl中,Declare 位于Begin之后;

2.注释不同,在Oracle中,可用“—“注释一行或“/* */”注释一段,在MySQL中,需用“/* */”或“#”来注释

3. 对触发前后变量值的引用方法不同;在Oracle中,用:new.eid, :old.eid表示新旧值,

在MySQL中,用New.eid,old.eid表示新旧值

4. 移植中发现的问题

1)Oracle的自治事务autonomous_transaction,MySQL不支持,您必须用其他方式实现,MySQL不允许在触发器过程中执行对触发器所在表的操作(包括读写)

2)MySQL函数和trigger中不能执行动态SQL语句,也就是说,您不能在触发器里面组合出来一个SQL字符串,然后用exec来执行

3)Oracle的表级触发器,MySQL还不支持,所以必须改成使用行级触发器,注意这会导致有时SQL语句的执行效率很低

三、存储过程的移植

MySQL的过程和函数语法与Oracle类似,但还是有细微差别,除了数据类型需要转换,还有:

1)格式不同,例如:

Oracle为:

CREATE OR REPLACE procedure procedure1(TableName in varchar2) is

mysql子查询sysdate_Oracle向MySQL 迁移相关事项相关推荐

  1. MySQL子查询操作实例详解

    本文实例总结了MySQL子查询操作.分享给大家供大家参考,具体如下: 定义两个表tb1和tb2 ? 1 2 CREATE table tbl1 ( num1 INT NOT NULL); CREATE ...

  2. MySQL——子查询用法

    文章目录 MySQL--子查询用法 1.子查询概述 2.子查询的使用 2.1.单行子查询 2.2.多行子查询 2.3.相关子查询 子查询练习题 MySQL--子查询用法 1.子查询概述 子查询简介 子 ...

  3. mysql子查询的语法_MySQL子查询Subquery语法介绍

    MySQL子查询Subquery语法介绍 发布时间:2020-05-19 15:48:10 来源:51CTO 阅读:187 作者:三月 下面讲讲关于MySQL子查询Subquery,文字的奥妙在于贴近 ...

  4. 浅谈 MySQL 子查询及其优化

    2019独角兽企业重金招聘Python工程师标准>>> 使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动 ...

  5. mysql子查询缺点_[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

    它的执行计划如下,请注意看关键词"DEPENDENT SUBQUERY": id  select_type         table   type            poss ...

  6. MySQL 子查询 嵌套查询

    MySQL 子查询 嵌套查询 一.带IN关键字的子查询 二.带EXISTS关键字的查询 三.带ANY.SOME 关键字的子查询 四.带ALL 关键字的查询 自言自语 一.带IN关键字的子查询 使用IN ...

  7. mysql子查询字符串位置_MySql基础-子查询

    一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询用()括起来 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任 ...

  8. mysql子查询分为几种方法_MYSQL子查询的5种形式

    mysql从4.1版开始支持子查询功能,在此版本前,可以用join写连表查询来进行替代,但不推荐这么写,相当麻烦,mysql子查询的几种常 见写法: 1.select * from xxx where ...

  9. mysql 子查询 as_mysql子查询

    更多关于LeetCode习题总结请翻阅我的博客: LeetCode - mysql子查询[184. 部门工资最高的员工] 子查询 一.按查询结果分类: 1.作为数据源使用: 2.作为选择条件使用: 二 ...

最新文章

  1. linux iptables 命令简介
  2. 港口物流系统设计与优化-SMU在线学习笔记
  3. 【转】最小编辑距离 算法原理
  4. Java集合中HashSet的实现原理
  5. java序列化和反序列化_Java恶意序列化背后的历史和动机
  6. mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法
  7. 揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
  8. 如何备份MySql的数据库
  9. html页面载入完毕返回顶部,HTMl页面中返回顶部如何实现 HTMl页面中返回顶部实现代码...
  10. 《计算机网络 自顶向下方法》(第7版)答案(第一章)(一)
  11. Facade模式简述
  12. 51单片机最小系统原理分析
  13. 粉丝文化:抖音广告短视频美妆营销中,男明星比女明星更带货?
  14. Reinforced Neighborhood Selection Guided Multi-Relational Graph Neural Networks阅读笔记
  15. html怎么给图片加倒影,用CSS3实现图片倒影效果,同时给出兼容早期版本IE的方案...
  16. android分屏模式_Android分屏显示总结
  17. java word文本框_Java 读取Word文本框中的文本、图片、表格
  18. 美团“二选一”被立案调查,反垄断将成为常态化
  19. C语言基本语法——循环篇(三种常见的循环)
  20. 复旦计算机系吴昊,数学科学学院候选好导师访谈——吴昊老师

热门文章

  1. TensorFlow, PyTorch, Caffe2的比较
  2. idea配置连接oracle数据库的pom文件中添加什么?
  3. idea下org.apache.commons.dbcp.BasicDataSourc找不到
  4. MYSQL查表的字段名称,字段类型,字段长度,字段注释的SQL语句
  5. leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)
  6. 【Java线程安全】一个简单的多线程程序
  7. PAT1055 集体照 (25 分)【3/6通过】
  8. 牛客网_PAT乙级_1026跟奥巴马一起编程(15)
  9. 分布式系统的数据分布方式
  10. JUC队列-ConcurrentLinkedQueue(四)