ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql。 现对转换过程中出现的问题及经验总结如下:

主键生成策略

创建一个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1

创建记录当前序列的表

DROP TABLE IF EXISTS sequence;

CREATE TABLE sequence (

name VARCHAR(50) NOT NULL,

current_value INT NOT NULL,

increment INT NOT NULL DEFAULT 1,

PRIMARY KEY (name)

) ENGINE=InnoDB;

INSERT INTO sequence VALUES (‘MovieSeq‘,3,5);

创建一个获取当前序列的function

DROP FUNCTION IF EXISTS currval;

CREATE FUNCTION currval (seq_name VARCHAR(50))

RETURNS INTEGER

CONTAINS SQL

BEGIN

DECLARE value INTEGER;

SET value = 0;

SELECT current_value INTO value

FROM sequence

WHERE name = seq_name;

RETURN value;

END;

获取下一个数值..先在sequence里面调用update当前最大数值+1然后再调用currval获得当前数值

DROP FUNCTION IF EXISTS nextval;

DELIMITER $

CREATE FUNCTION nextval (seq_name VARCHAR(50))

RETURNS INTEGER

CONTAINS SQL

BEGIN

UPDATE sequence

SET current_value = current_value + increment

WHERE name = seq_name;

RETURN currval(seq_name);

END$

DELIMITER ;

DROP FUNCTION IF EXISTS setval;

DELIMITER $

CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)

RETURNS INTEGER

CONTAINS SQL

BEGIN

UPDATE sequence

SET current_value = value

WHERE name = seq_name;

RETURN currval(seq_name);

END$

DELIMITER ;

如果以上语句执行有异常请先执行这句:set global logbintrustfunctioncreators=TRUE;

插入时的主键生成:

mysql: SELECT MMC.NEXTVAL(‘SEQ_MD_ENTITY_ATTRIBUTE‘)

oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual

日期处理

mysql : DATE_FORMAT(NOW(),‘%Y-%m-%d %H:%i:%s‘)

oracle: TO_CHAR(SYSDATE,‘YYYY-MM-DD hh24:mi:ss‘)

nvl函数

mysql: ifnull(A.USER_KPI,0)

oracle: NVL(A.USER_KPI,0)

to_number

oracle 的 to_number

mysql不需要

关键字、保留字

涉及到关键字,mysql关键字需要加上``号

mysql: PARA_VALUE as `KEY`

oracle : PARA_VALUE as KEY

rownum

Unknown column ‘rownum‘ in ‘where clause‘

oracle自定义sql中如果使用了rownum=1 mysql中可以写成limit 1

大小写问题

在oracle中一般情况下不区分大小写

但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。

解决的办法是把mysql的数据库名和oracle的大小写保持一致,

表名与应用程序中sql字符串中的表名保持一致,

如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。

如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。

字符串截取

mysql:

截取log_data从逗号开始之后的字符:

SELECT substring_index(log_data,‘,‘,-1)

FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

截取log_data从逗号开始之前的字符:

SELECT substring_index(log_data,‘,‘,1)

FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

oracle :

截取log_data从逗号开始之后的字符:

SELECT SUBSTR(log_data, INSTR(log_data, ‘,‘, 1, 1) +1) AS app_ver_id

FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

截取log_data从逗号开始之前的字符:

SELECT SUBSTR(log_data,0,INSTR(log_data, ‘,‘, 1, 1) - 1) AS app_ver_id

FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;

字符串格式化

mysql:CONCAT

oracle:TO_CHAR

主键长度问题

在迁移到mysql后可能会出现主键长度太短,需要增加长度。

http://www.cnblogs.com/kunpengit/p/4462656.html

原文:http://www.cnblogs.com/softidea/p/5309299.html

oracle转mysql总结经验,oracle转mysql总结(转)相关推荐

  1. mysql优化经验_中国移动MySQL数据库优化经验

    开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优 化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发 ...

  2. 确认了!MySQL 狠甩 Oracle 稳居 Top1!

    01 几乎所有程序员都会用到的 MySQL 稳居 Top 1 科技长河,顺之者昌,错失者亡. 在2019年,CSDN面向具备超强计算力的数字化世界,我们进行了「大数据技术应用现状分析」,并发布了< ...

  3. Oracle收购Sun消化不良 Sun赢利困难 MySQL将何去何从

    [IT商业新闻网讯](记者陈伶帆.<IT时代周刊>记者王一水)埃里森在上周六回答媒体提问时表示:"我认为目前的合作的进展很顺利,预计Sun将很快实现盈利",不过,分析师 ...

  4. oracle入门到大神(备mysql、java基础、javaee必经之路)-任亮-专题视频课程

    oracle入门到大神(备mysql.java基础.javaee必经之路)-19178人已学习 课程介绍         Oracle10g的安装.orcale的基本概念介绍.命令行常用操作.Scot ...

  5. Oracle 工程师离职并回踩:MySQL 糟糕透顶,强烈推荐 PostgreSQL

    整理 | 祝涛 出品 | CSDN(ID:CSDNnews) 如果你即将离职,你会做什么?抨击自己付出了五年心血的技术--这是Oracle公司前首席软件工程师.MySQL优化器团队成员Steinar ...

  6. 使用外部表关联MySQL数据到Oracle

    因为业务需要,有个临时的活动需要DBA来支持一些数据业务,问题来了,需要从MySQL端同步一部分数据到Oracle端,然后从Oracle端匹配查到相应的数据返回给MySQL,至于原因,也是不同的业务系 ...

  7. docker oracle navicat_拥抱开源从零开始 Docker、Mysql amp; JPA

    MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) ...

  8. 不用oracle改用mysql_数据库从oracle移植到mysql时需要进行的修改

    分页方式不同,oracle使用rownum,mysql使用limit 使用hibernate的QBC不用修改,但hql和sql都应该用统一方法修改 mysql子查询必须带别名 select * fro ...

  9. Mysql迁移到Oracle方法

    目录 1简介... 1 2 准备... 1 2.1 环境说明... 1 3 安装... 2 4 配置... 2 5 使用... 2 5.1 验证实验... 2 5.2 问题分析... 4 6 延展.. ...

最新文章

  1. 面试宝典:深入理解这110道python面试题,AI和大数据向你招手
  2. 如何禁用文本选择突出显示
  3. go interface转int_图解go反射实现原理
  4. c++的程序的文件结构
  5. 广播地址的作用_跟百哥学网络16:ARP地址解析协议分析
  6. java 动态获取IP地址(城市)
  7. RabbitMQ和Kafka的显著差异(5)
  8. python middleware模块_python之auth模块
  9. 【中秋福利】Linux系统从入门到精通推荐的书籍——中秋限时送书活动
  10. 屏幕操作录制成gif图的技巧
  11. 题目206-矩形的个数
  12. 解决办法:Invalid Gradle JDK configuration found
  13. 硬件工程师学习英语必备
  14. 阿尔伯塔大学 计算机科学,阿尔伯塔大学
  15. 数据库高并发解决方案(二)部署优化
  16. php 如何实现心跳包,Socket心跳机制-JS+PHP实现
  17. 什么是等级保护?为什么要开展等级保护?
  18. VS2019中字符串函数的使用
  19. modprobe命令介绍
  20. 全球与中国聚氨酯同步带市场深度研究分析报告

热门文章

  1. java多线程 cpu分配_java多线程总结(转载)
  2. matlab delete、clf、cla、close、closereq删除对象
  3. 一步步通过命令行cl.exe编译Windows程序
  4. java eden space_JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...
  5. java记录登陆时间_Spring security如何实现记录用户登录时间功能
  6. oracle exp 00006,Oracle 12.1新特性----使用RMAN从备份中实现recover table
  7. java并发问题_并发理论基础:并发问题产生的三大根源
  8. java排序两个数组_java – 如何相对于彼此排序两个数组.
  9. 为什么子进程每次执行顺序不一样_看完这篇还不懂Redis的RDB持久化,你来打我...
  10. php h2,微信连接失败:一直返回h2Moved/h2 (终于搞定了)