暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

原来你是这样的Oracle

微光伴行 2021-03-25
518

题外话

      初识oracle数据库还要追溯到几年前,工作后项目采用的数据库都是mysql,便渐渐对oracle开始淡忘。如果不是最近的项目使用oracle数据库,估计我不会再去了解,也就没有这篇文章。


Mysql与Oracle的区别

      学习过程中类比是一个很重要的方法,通过对比事物的共同点和差异点,更深层次的进行理解,本篇将以Mysql与Oracle的区别来展开。


  • 事务隔离级别

Mysql支持四种隔离级别:Read Uncommitted(读未提交)、Read Committed(为读已提交)、Repeatable Read(可重复读)、Serializable(可串行化),默认隔离级别为可重复读

Oracle支持两种隔离级别:Read Committed(为读已提交)、Serializable(可串行化),默认隔离级别为读已提交


  • 事务支持

Mysql有MyISAM、InnoDB两种存储引擎,InnoDB支持事务,MyISAM并不支持,虽MyISAM查询效率比InnoDB高很多,但数据插入和更新的时会进行表锁,导致速度很慢。

Oracle则完全支持事务


  • 数据类型

Mysql数据类型要比oracle具体,借用java抽象一词,如果oracle是抽象类的话,那mysql就是它的继承类。

数值和日期两种类型算差别最大的

Mysql数值型有int(整型)、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、decimal(浮点型,精度比float和double要高,一般小数数据存储都采用此类型)

Oracle数值型只有number,它既可以表示整型,也可以表示浮点型

Mysql日期类型有date(日期)、datetime(日期时间)、timestamp(时间戳)

Oracle日期型有date(日期时间)、timestamp(时间戳),它的日期和时间采用的都是date


  • 分页查询

Mysql实现分页,只需定义sql语句加上limit关键字即可

Oracle则需要用伪列ROWNUM和嵌套进行查询

如果pageNo代表页码,从1开始计算,pageSize代表页数,那么两者的分页sql语句如下所示

    select * from sys_user limit (pageNo – 1)*pageSize, pageSize
      select * from (select su.*,ROWNUM rn from sys_user su where ROWNUM <= pageNo*pageSize) temp where rn > (pageNo-1)*pageSize



      • 函数处理

      两个数据库对同一类数据处理函数不同点有很多,此篇仅列举几个比较典型的

      Mysql:日期格式化 DATE_FORMAT(now(),'%Y-%m-%d')、STR_TO_DATE('2020-05-17','%Y-%m-%d')、非空判断IFNULL、字符串拼接concat支持多个、支持IF和case when进行流程判断、当前时间now()

      Oracle: 日期格式化 TO_CHAR(sysdate, 'yyyy-mm-dd')、TO_DATE('2020-05-17','%Y-%m-%d') 、非空判断NVL、字符串拼接concat只支持两个,若需要支持多个只能嵌套,也可以直接用||符号拼接、不支持IF函数支持case when进行流程判断、当前时间sysdate


      • 主键自增长

      Mysql主键自增长,只需要主键字段设置AUTO_INCREMENT

      Oracle主键稍显麻烦,需要定义序列和触发器

        CREATE SEQUENCE SYS_USER _ID
        MINVALUE 1
        NOMAXVALUE
        START WITH 1
        INCREMENT BY 1
        NOCYCLE
        NOCACHE;
          CREATE TRIGGER SYS_USER_ID_TRG
          BEFORE INSERT
          ON SYS_USER
          FOR EACH ROW
          BEGIN
          SELECT SYS_USER
          INTO:NEW.ID FROM DUAL;
          END;

          总结

                 Oracle比Mysql数据库要复杂,Oracle作为一个重量型数据库,学习成本较高。如果非工作需要的话,个人更倾向使用mysql,因为我只喜欢用简单点的,哈哈哈。


          文章转载自微光伴行,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论