• MYSQL到ORACLE法式迁移的细致事变


     起原:赛迪网 作者:余枫  




     有良多使用项目, 刚起步的时分用MYSQL数据库根基上能完成各种结果需求,跟着使用用户的增多,数据量的增添,MYSQL逐阵势泛起不堪重负的景遇:衔接很慢乃至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,使用法式也要相应做一些批改。自己总结出以下几点细致事变,希望对人人有所帮忙。

    1. 自动增添的数据范例处理奖励
        MYSQL有自动增添的数据范例,拔出记载时不消利用此字段,会自动得到数据值。ORACLE没有自动增添的数据范例,必要建立一个自动增添的序列号,拔出记载时要把序列号的下一个值赋于此字段。

        CREATE SEQUENCE 序列号的称呼 (最好是表名 序列号标识表记标帜) INCREMENT BY 1  START  WITH  1 MAXVALUE  99999  CYCLE  NOCACHE;
        其中最大的值按字段的长度来定, 假使界说的自动增添的序列号 NUMBER(6) , 最大值为999999
        INSERT 语句拔出这个字段值为: 序列号的称呼.NEXTVAL

    2. 单引号的处理奖励
        MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在拔出和批改字符串前必需做单引号的交换:把一切泛起的一个单引号交换成两个单引号。

    3.  翻页的SQL语句的处理奖励
        MYSQL处理奖励翻页的SQL语句比较庞大,用LIMIT 起头位置, 记载个数;PHP里还可以用SEEK定位到了局集的位置。ORACLE处理奖励翻页的SQL语句就比较繁琐了。每个了局集只需一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不克不及用ROWNUM>80。
        以下是经由解析后较好的两种ORACLE翻页SQL语句( ID是独一关键字的字段名 ):
        语句一:
    SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;
     
        语句二:
    SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

    4. 长字符串的处理奖励
        长字符串的处理奖励ORACLE也有它分外的处所。INSERT和UPDATE时最大可利用的字符串长度小于便是4000个单字节, 假使要拔出更长的字符串, 请思索字段用CLOB范例,要领借用ORACLE里自带的DBMS_LOB法式包。拔出批改记载前肯定要做进行非空和长度武断,不克不及为空的字段值和凌驾长度字段值都应该提出告诫,前去前次利用。

    5.  日期字段的处理奖励
        MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只需DATE,包孕年月日时分秒信息,用以后数据库的细碎年光为SYSDATE, 正确到秒,可能用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日 24小时:分钟:秒 的款式YYYY-MM-DD HH24:MI:SS TO_DATE()尚有良多种日期款式, 可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)

        日期字段的数学运算公式有很大的差别。MYSQL找到离以后年光7天用 DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离以后年光7天用 DATE_FIELD_NAME >SYSDATE - 7;

    6.  空字符的处理奖励
        MYSQL的非空字段也有空的内容,ORACLE里界说了非空字段就不容许有空的内容。按MYSQL的NOT NULL来界说ORACLE表结构, 导数据的时分会孕育爆发错误。因而导数据时要对空字符进行武断,假使为NULL或空字符,必要把它改成一个空格的字符串。

    7. 字符串的恍惚比较
       MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种要领不克不及使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0 会得到改正确的查找了局。

    8. 法式和函数里,利用数据库的任务完成后请细致了局集和指针的开释。




    版权声明: 原创作品,容许转载,转载时请务必以超链接形式标明文章 原始理由 、作者信息和本声明。不然将清查功令责任。

  • 相关阅读:
    HTTP响应状态码整理
    Python通用爬虫,聚焦爬虫概念理解
    HTTP无状态协议理解
    会话与事务知识点总结
    并发一致性知识点整理
    使用隔离级别read committed隐式解决并发冲突
    多并发笔记整理
    git基本使用
    Docker其他
    Docker Bind Mount 与 Volume
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975804.html
Copyright © 2020-2023  润新知