orcle跟mysql_Oracle与Mysql比较

本文详细对比了Oracle和MySQL在连接字符串、生成唯一序列、自增主键、字符串引用、分页方式、真假判断、日期操作、LIKE查询、备份命令、默认提交模式、日期转换等方面的区别,以及一些常见函数的用法差异。
摘要由CSDN通过智能技术生成

常见区别

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('

-------------

jack

所有函数链接:http://www.shouce.ren/api/oracle/#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值