oracle转mysql总结

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

主键生成策略

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

  1. 创建记录当前序列的表
  2. DROP TABLE IF EXISTS sequence;
  3. CREATE TABLE sequence (
  4. name VARCHAR(50) NOT NULL,
  5. current_value INT NOT NULL,
  6. increment INT NOT NULL DEFAULT 1,
  7. PRIMARY KEY (name)
  8. ) ENGINE=InnoDB;
  9. INSERT INTO sequence VALUES ('MovieSeq',3,5);

  1. 创建一个获取当前序列的function
  2. DROP FUNCTION IF EXISTS currval;
  3. CREATE FUNCTION currval (seq_name VARCHAR(50))
  4. RETURNS INTEGER
  5. CONTAINS SQL
  6. BEGIN
  7. DECLARE value INTEGER;
  8. SET value = 0;
  9. SELECT current_value INTO value
  10. FROM sequence
  11. WHERE name = seq_name;
  12. RETURN value;
  13. END;

  1. 获取下一个数值..先在sequence里面调用update当前最大数值+1然后再调用currval获得当前数值
  2. DROP FUNCTION IF EXISTS nextval;
  3. DELIMITER $
  4. CREATE FUNCTION nextval (seq_name VARCHAR(50))
  5. RETURNS INTEGER
  6. CONTAINS SQL
  7. BEGIN
  8. UPDATE sequence
  9. SET current_value = current_value + increment
  10. WHERE name = seq_name;
  11. RETURN currval(seq_name);
  12. END$
  13. DELIMITER ;

  1. DROP FUNCTION IF EXISTS setval;
  2. DELIMITER $
  3. CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
  4. RETURNS INTEGER
  5. CONTAINS SQL
  6. BEGIN
  7. UPDATE sequence
  8. SET current_value = value
  9. WHERE name = seq_name;
  10. RETURN currval(seq_name);
  11. END$
  12. DELIMITER ;

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

插入时的主键生成:
  1. mysql: SELECT MMC.NEXTVAL('SEQ_MD_ENTITY_ATTRIBUTE')
  2. oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual

日期处理

  1. mysql : DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
  2. oracle: TO_CHAR(SYSDATE,'YYYY-MM-DD hh24:mi:ss')

nvl函数

  1. mysql: ifnull(A.USER_KPI,0)
  2. oracle: NVL(A.USER_KPI,0)

to_number

  1. oracle to_number
  2. mysql不需要

关键字、保留字

  1. 涉及到关键字,mysql关键字需要加上``
  2. mysql: PARA_VALUE as `KEY`
  3. oracle : PARA_VALUE as KEY

rownum

  1. Unknown column 'rownum' in 'where clause'
  2. oracle自定义sql中如果使用了rownum=1 mysql中可以写成limit 1

大小写问题

  1. oracle中一般情况下不区分大小写
  2. 但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
  3. 解决的办法是把mysql的数据库名和oracle的大小写保持一致,
  4. 表名与应用程序中sql字符串中的表名保持一致,
  5. 如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。
  6. 如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。

字符串截取

  1. mysql:
  2. 截取log_data从逗号开始之后的字符:
  3. SELECT substring_index(log_data,',',-1)
  4. FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';
  5. 截取log_data从逗号开始之前的字符:
  6. SELECT substring_index(log_data,',',1)
  7. FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';
  8. oracle :
  9. 截取log_data从逗号开始之后的字符:
  10. SELECT SUBSTR(log_data, INSTR(log_data, ',', 1, 1) +1) AS app_ver_id
  11. FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';
  12. 截取log_data从逗号开始之前的字符:
  13. SELECT SUBSTR(log_data,0,INSTR(log_data, ',', 1, 1) - 1) AS app_ver_id
  14. FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

字符串格式化

  1. mysql:CONCAT
  2. oracle:TO_CHAR

主键长度问题

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

oracle转mysql总结的更多相关文章

  1. Oracle转MySQL

    1. to_date 直接去掉 例如 select log.id from CM_LOGINLOG log  where log.orgid =?  and log.isAuto =?  and lo ...

  2. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  3. oracle迁移mysql数据库注意

    oracle转mysql修改: . substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_ch ...

  4. Oracle与MySQL的区别

    1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...

  5. 配置ogg目录索引-oracle与mysql的双向同步步骤

    以下几篇文章描述了利用ogg对oracle与mysql进行双向同步的配置过程以及注意事项,欢迎参考. 配置ogg异构oracle-mysql(1)基础环境配置 http://www.cnblogs.c ...

  6. Loadrunner参数化连接oracle、mysql数据源报错及解决办法

    Loadrunner参数化连接oracle.mysql数据源报错及解决办法 (本人系统是Win7 64,  两位小伙伴因为是默认安装lr,安装在 最终参数化的时候,出现连接字符串无法自动加载出来: 最 ...

  7. oracle转Mysql中,varchar2(10)和number应该转换为什么类型?

    一. varchar2(10)和number应该转换为什么类型? oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类 ...

  8. 数据库迁移之从oracle 到 MySQL

    方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 ...

  9. Oracle使用goldengate分别向Oracle和mysql双路的单向复制

    一.Oracle分别向Oracle和mysql双路的单向复制是在: ORACLE-mysql的单向复制基础上做的.http://blog.csdn.net/q947817003/article/det ...

  10. [数据库]Oracle和mysql中的分页总结

    Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...

随机推荐

  1. JAVA-数据库之查询记录

    相关资料:<21天学通Java Web开发> ResultSet结果集1.使用exectteQuery()方法查询数据.2.exectueQuery()方法接收一个查询SQL语句.3.返回 ...

  2. 一个实体对象不能由多个 IEntityChangeTracker 实例引用。

    错误代码 public bool addSubOptionItem(csModel.cs_Answer answers) { bool result = false; wpe = new csWeiP ...

  3. C# Null 赋值

    在此之前,我们先看一段程序: class Program    {        static void Main(string[] args)        {            Childre ...

  4. SP_OACreate提权经验

    在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权   首先   EXEC sp_configure 'show advanced options', 1;   ...

  5. [转]Oracle存储过程给变量赋值的方法

    原文地址:http://blog.csdn.net/drbing/article/details/51821262 截止到目前我发现有三种方法可以在存储过程中给变量进行赋值:1.直接法     :=  ...

  6. jquery文字纵向滚动效果(带间隔停留)

    <script type="text/javascript"> //文字纵向滚动 $(function() { var $this = $("#quotati ...

  7. C#2.0 Socket套接字编程之实例初探 200

    首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以 ...

  8. linux安装android sdk

    https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip 1,先安装java https://developer.and ...

  9. 七牛图片存储api

    https://developer.qiniu.com/kodo 属于对象存储 https://www.qiniu.com/prices 如何获取存储文件的外链接 https://developer. ...

  10. CREATESTRUCT cs 结构体

    PreCreateWindow(CREATESTRUCT& cs) typedef struct tagCREATESTRUCT { LPVOID lpCreateParams; // 创建窗 ...