Oracle数据库与Mysql区别比较
小标 2018-03-07 来源 :网络 阅读 1616 评论 0

摘要:常见区别如下

常见区别

1. 连接字符串在Oracle中用“||”或者concatt('a','b'),SqlServer中用+,MySQL中用concat('a','b','c')。

2. orcale 生成唯一序列是 select sys.guid() from dual ,mysql是 select uuid() from dual。

3. mysql可以实现自增长主键(通过字段的auto_increment属性);Oracle则需要通过序列(Sequence)来实现。

4. mysql可以用双引号来引用字符串(当然单引号也行);Oracle只能用单引号。

5. mysql在查询语句中可以通过limit [offset,] 来直接分页;而Oracle需要使用rownum。

6. mysql对于真假的判断,0为假1为真;Oracle则是用true/false。

7. mysql的查询可以 select sysdate(); ;而Oracle需要引用虚表(select sysdate from dual;)。

8. mysql对于like的查询,CONCAT('%', #{name,jdbcType=VARCHAR},'%') ;Oracle则是用LIKE '%'||#{name,jdbcType=VARCHAR}||'%'

9. mysql的查询可以 select sysdate(); ;而Oracle需要引用虚表(select sysdate from dual;)。

10. mysql中备份命令:mysqldump,执行结果是一个sql文件;oracle备份命令:dpdump,执行结果是一个dmp文件。前者是文本sql命令,可以直接导入到其它mysql数据库,甚至可以稍作修改导入到其它类型的数据库;后者导出文件是二进制的,只能Oracle自己用(甚至还有版本限制)。

11. mysql中的命令默认是直接commit的;Oracle默认不是

12. mysql中日期的转换用dateformat()函数;Oracle用to_date()与to_char()两个函数。

13. mysql在Windows环境下大小写是不敏感的;unix/linux环境下,对数据库名、表名大小写敏感,列名大小写不敏感。Oracle则不论环境大小写都不敏感。

14. mysql支持枚举类型(enum)、集合类型(set);Oracle不直接支持,需要使用外键等其它手段实现。

常见函数区别

1. 功能: 返回不小于 X 的最小整数

用法:

mysqls: select ceiling(-1.001) value
oracle: select ceil(-1.001) value from dual

2. 功能: 在字符串 str 中所有出现的字符串 from_str 均被 to_str 替换,然后返回这个字符串.

用法:

mysql: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value
oracle: SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

3. 函数名称不同:

ORACLE: select substr('abcd',2,2) value from dual
MYSQL: select substring('abcd',2,2) value

4. 函数名称不同:

instr -> locate(注意:locate的子串和总串的位置要互换)
ORACLE: SELECT instr('abcdefg', 'ab') VALUE FROM DUAL
MYSQL: SELECT locate('ab', 'abcdefg') VALUE

5. 函数名称不同:

ORACEL: SELECT length('AAAASDF') VALUE FROM DUAL
MYSQL: SELECT char_length('AAAASDF') VALUE

6. 函数名称不同(根据不同的作用进行选择):

ORACLE: select u.email_address, nvl(u.email_address, 10) value from sd_usr u (如果u.email_address=NULL,就在DB中用10替换其值)
MYSQL: select u.email_address, IFNULL(u.email_address, 10) value from sd_usr u(如果u.email_address=NULL,显示结果中是10,而不是在DB中用10替换其值)
select u.email_address, ISNULL(u.email_address) value from sd_usr u(如果u.email_address是NULL, 就显示1,否则就显示0)

7. decode说明:

(1). decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
(2). mysql If语法说明
功能: 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2;
否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在
语境而定。
用法:
mysql: SELECT IF(1>2,2,3);

8. 函数名称不同

ORACLE> select to_char(sysdate,'yyyy-mm-dd') from dual;
ORACLE> select to_char(sysdate,'hh24-mi-ss') from dual;
mysql> select date_format(now(),'%Y-%m-%d');
mysql> select time_format(now(),'%H-%i-%S');

9. 函数名称不同:

ORACLE:SELECT to_date('2009-3-6','yyyy-mm-dd') VAULE FROM DUAL
MYSQL: SELECT STR_TO_DATE('2004-03-01', '%Y-%m-%d') VAULE

10. 函数名称不同:

TRUNC函数为指定元素而截去的日期值。

ORACLE: select trunc(-1.002) value from dual
MYSQL:select cast(-1.002 as SIGNED) value
MYSQL:

字符集转换 :  

 CONVERT(xxx  USING   gb2312)

类型转换和SQL Server一样,就是类型参数有点点不同  : CAST(xxx  AS   类型)  ,   CONVERT(xxx,类型),类型必须用下列的类型:

可用的类型

二进制,同带binary前缀的效果 : BINARY

字符型,可带参数 : CHAR()

日期 : DATE

时间: TIME

日期时间型 : DATETIME

浮点数 : DECIMAL

整数 : SIGNED

无符号整数 : UNSIGNED

11. 函数名称不同

ORACLE:SELECT TO_NUMBER('123') AS VALUE FROM DUAL;
MYSQL: SELECT CAST("123" AS SIGNED INTEGER) as value;
SIGNED INTEGER:带符号的整形

12. 写法不同:

ORACLE:select SYSDATE value from dual
MYSQL:select now() value / select sysdate() value

13. 函数名称不同:

ORACLE: SELECT ADD_MONTHS(sysdate, 2) as value from DUAL;
MYSQL: SELECT DATE_ADD(sysdate(), interval 2 month) as value from DUAL;

14. 功能: 返回两个日期之间的天数。

用法:

mysql: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate

oracle: 直接用两个日期相减(比如d1-d2=12.3)

15. Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。

MYSQL: 可以从JAVA中得到错误代码,错误状态和错误消息

16. Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。

MYSQL: 可以从JAVA中得到错误代码,错误状态和错误消息

17. 在MYSQL中是自动增长列. 如下方法获取最新ID:

START TRANSACTION;
INSERT INTO user(username,password)
VALUES (username,MD5(password));
SELECT LAST_INSERT_ID() INTO id;
COMMIT;

ORACLE中是使用 SEQUENCE;

oracle所有函数

1. ascii  

返回与指定的字符对应的十进制数;

SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;
A         A      ZERO     SPACE
--------- --------- --------- ---------
65        97        48        32

2.CHR

给出整数,返回对应的字符;

SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
赵 A

3.INITCAP

返回字符串并将字符串的第一个字母变为大写;

SQL> select initcap('smith') upp from dual;
UPP
-----
Smith

4.LOWER

返回字符串,并将所有的字符小写

SQL> select lower('AaBbCcDd')AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd

5.UPPER

返回字符串,并将所有的字符大写

SQL> select upper('AaBbCcDd') upper from dual;
UPPER
--------
AABBCCDD

6.RPAD和LPAD(粘贴字符)

RPAD  在列的右边粘贴字符

LPAD  在列的左边粘贴字符

SQL> select lpad(rpad('jack',10,'*'),17,'*')from dual;
LPAD(RPAD('JACK',1
-----------------
*******jack******

不够字符则用*来填满

7.LTRIM和RTRIM

LTRIM  删除左边出现的字符串

RTRIM  删除右边出现的字符串

SQL> select ltrim(rtrim('   jack   ',' '),' ') from dual;
LTRIM(RTRIM('
-------------

本文由职坐标整理并发布,希望对同学们能对Oracle与Mysql区别有更清晰的认知。

了解更多详情请关注职坐标Oracle数据库频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程