主键:
MySql一般使用自动增长类型,在创建表的时候只要指定表的主键为auto increment,插入记录时就不需要再为主键添加记录了,主键会自动增长。Oracle中没有自动增长,主键一般使用序列,插入记录时将序列号的下一值付给该字段即可,只是ORM框架只是需要native主键生成策略即可。
单引号的处理:
MySql里可以使用双引号来包起字符串,Oracle里要使用单引号包起字符串。
分页查询:
这个应该是两者最明显的区别了,很多人都知道MySql中分页很简单,因为他有专门的关键字limit来实现分页查询;
但是Oracle里面没有这种关键字来实现分页查询的,所以它实现起来就比MySql要繁琐得多了,在每个结果集中只有一个rownum字段标明它的位置,并且只能用rownum<=某个数,不能用rownum>=某个数,因为ROWNUM是伪列,在使用时所以需要为ROWNUM取一个别名,变成逻辑列,然后来操作。select * from (select ROWNUM as num,A.* from (select * from test) A where ROWNUM <=40) where num >= 20; 这是这两者的最大的不同。
数据类型
Oracle中的整型,number(),字符串类型,varchar2()
MySQL中的整型,int(),字符串类型,varchar()
日期
扫描二维码关注公众号,回复: 11338667 查看本文章Oracle中的日期,to_date()字符串转日期,to_char()日期转字符串,last_day()月的最后一天,add_months()对指定的日期加上指定月,months_between()相差的月,next_day()返回给定日期第二天开始一周内
的指定周几的日期。
MySQL中的日期,date(),time(),timedate(),timestamp(),Year()
空值
MySQL中的null值处理,用ifnull(),一般用法ifnull(comm,0);
Oracle中的空值处理,用NVL()两个参数,NVL2()三个参数,其中null在Oracle中最大,在MySQL中最小
去空
MySQL中只有trim(),Oracle中有trim(),ltrim(),rtrim()
分组
group up在Oracle中后面要跟出现的所有字段名,MySQL中可以跟单独字段
其他
对事务的提交
MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮
事务隔离级别
MySQL是read commited(已提交读)的隔离级别,而Oracle是repeatable read(可重复读)的隔离级别,默认隔离级别不同
对事务的支持
MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务
保存数据的持久性
MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复
备份
MySQL逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用,Oracle逻辑备份时不锁定数据,且备份的数据是一致
性能诊断
MySQL的诊断调优方法较少,主要有慢查询日志。
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等
权限与安全
MySQL的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。
Oracle的权限与安全概念比较传统,中规中矩。
管理工具
MySQL管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。
Oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。
最重要的区别
MySQL是轻量型数据库,并且免费,没有服务恢复数据。
Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。