Oracle 与 MysqL 的区别总结
博主在大学期间一直使用的是MysqL数据库,在来到公司后,公司使用的数据库都是Oracle,在经过了两周的学习后,总结出了两个数据库的一些区别。
-
Oracle的数据类型相比MysqL有所区别,Oracle没有基本数据类型,而是用
number
代替MysqL里面的int double等,字符串类型既有MysqL的varchar类型,也有其独占的varchar2
类型。(varchar是varchar2的同义词
这两个是一样的,oracle使用的是varchar2 ,使用varchar是为了兼容其他数据库) -
Oracle 实现主键自增不能像MysqL一样在创建字段的时候直接使用
auto_increasement
,Oracle实现主键自增可以使用sequence加trigger。具体实现可以参考如下代码。# 创建 scott 中的序列 ODS_SEQ create sequence SCott.ODS_SEQ INCREMENT BY 1 MINVALUE 1 MAXVALUE 999999999999 START WITH 1 NOCACHE ORDER; # 创建scott 中的触发器 ODS_TR,在插入新数据的时候调用 ODS_SEQ,实现自增 CREATE OR REPLACE TRIGGER SCott.ODS_TR BEFORE INSERT ON SCott.FR_IT_RM_ODS_TABLE_FI FOR EACH ROW BEGIN SELECT ods_sequence.nextval INTO :new.id FROM DUAL; END;
-
Oracle 相比 MysqL 可以使用
order by null first
或者null last
来使 null字段向前或者向后排序,MysqL则没有这个功能。 -
Oracle 表有两个伪列
rowid
和rownum
,序列有两个伪列nextval
和currval
,但没有类似MysqL一样的limit函数,所以实现分页的时候一般通过 rowid 和 rownum 结合来使用。-- 查询前10行记录 SELECT ROWNUM, t1.* FROM XXX t1 WHERE ROWNUM <= 10; -- 查询从11行到20行的记录 SELECT * FROM XXX WHERE ROWNUM < 21 MINUS SELECT * FROM XXX WHERE ROWNUM < 11; -- or SELECT * FROM (SELECT ROWNUM NO, t1.* FROM XXX t1) t2 WHERE t2.NO > 10 AND t2.NO < 21;
-
有一些特性是之前MysqL里面没有的,但Oracle有,在MysqL更换innodb引擎或者版本更新后添加进去的。如窗口函数(MysqL8.0),数据库缓存池(innodb引擎引入)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。