题外话
初识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 _IDMINVALUE 1NOMAXVALUESTART WITH 1INCREMENT BY 1NOCYCLENOCACHE;
CREATE TRIGGER SYS_USER_ID_TRGBEFORE INSERTON SYS_USERFOR EACH ROWBEGINSELECT SYS_USERINTO:NEW.ID FROM DUAL;END;
总结
Oracle比Mysql数据库要复杂,Oracle作为一个重量型数据库,学习成本较高。如果非工作需要的话,个人更倾向使用mysql,因为我只喜欢用简单点的,哈哈哈。




