Oracle與Mysql比較

常見區(qū)別

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可以實(shí)現(xiàn)自增長主鍵(通過字段的auto_increment屬性);Oracle則需要通過序列(Sequence)來實(shí)現(xiàn)。

4. mysql可以用雙引號(hào)來引用字符串(當(dāng)然單引號(hào)也行);Oracle只能用單引號(hào)。

5. mysql在查詢語句中可以通過limit [offset,] 來直接分頁;而Oracle需要使用rownum。

6. mysql對(duì)于真假的判斷,0為假1為真;Oracle則是用true/false。

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

8. mysql對(duì)于like的查詢,CONCAT('%', #{name,jdbcType=VARCHAR},'%') ;Oracle則是用LIKE '%'||#{name,jdbcType=VARCHAR}||'%'

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

10. mysql中備份命令:mysqldump,執(zhí)行結(jié)果是一個(gè)sql文件;oracle備份命令:dpdump,執(zhí)行結(jié)果是一個(gè)dmp文件。前者是文本sql命令,可以直接導(dǎo)入到其它mysql數(shù)據(jù)庫,甚至可以稍作修改導(dǎo)入到其它類型的數(shù)據(jù)庫;后者導(dǎo)出文件是二進(jìn)制的,只能Oracle自己用(甚至還有版本限制)。

11. mysql中的命令默認(rèn)是直接commit的;Oracle默認(rèn)不是

12. mysql中日期的轉(zhuǎn)換用dateformat()函數(shù);Oracle用to_date()與to_char()兩個(gè)函數(shù)。

13. mysql在Windows環(huán)境下大小寫是不敏感的;unix/linux環(huán)境下,對(duì)數(shù)據(jù)庫名、表名大小寫敏感,列名大小寫不敏感。Oracle則不論環(huán)境大小寫都不敏感。

14. mysql支持枚舉類型(enum)、集合類型(set);Oracle不直接支持,需要使用外鍵等其它手段實(shí)現(xiàn)。

常見函數(shù)區(qū)別

1. 功能: 返回不小于 X 的最小整數(shù)

用法:

mysqls: select ceiling(-1.001) value

oracle: select ceil(-1.001) value from dual

2. 功能: 在字符串 str 中所有出現(xiàn)的字符串 from_str 均被 to_str 替換,然后返回這個(gè)字符串.

用法:

mysql: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value

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

3. 函數(shù)名稱不同:

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

MYSQL: select substring('abcd',2,2) value

4. 函數(shù)名稱不同:

instr -> locate(注意:locate的子串和總串的位置要互換)

ORACLE: SELECT instr('abcdefg', 'ab') VALUE FROM DUAL

MYSQL: SELECT locate('ab', 'abcdefg') VALUE

5. 函數(shù)名稱不同:

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

MYSQL: SELECT char_length('AAAASDF') VALUE

6. 函數(shù)名稱不同(根據(jù)不同的作用進(jìn)行選擇):

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,顯示結(jié)果中是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,缺省值)

該函數(shù)的含義如下:

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() 的返回值為數(shù)字值或字符串值,具體情況視其所在

語境而定。

用法:

mysql: SELECT IF(1>2,2,3);

8. 函數(shù)名稱不同

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. 函數(shù)名稱不同:

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. 函數(shù)名稱不同:

TRUNC函數(shù)為指定元素而截去的日期值。

ORACLE: select trunc(-1.002) value from dual

MYSQL:select cast(-1.002 as SIGNED) value

MYSQL:

字符集轉(zhuǎn)換 :?? CONVERT(xxx? USING?? gb2312)

類型轉(zhuǎn)換和SQL Server一樣,就是類型參數(shù)有點(diǎn)點(diǎn)不同? : CAST(xxx? AS?? 類型)? ,?? CONVERT(xxx,類型),類型必須用下列的類型:

可用的類型

二進(jìn)制,同帶binary前綴的效果 : BINARY

字符型,可帶參數(shù) : CHAR()

日期 : DATE

時(shí)間: TIME

日期時(shí)間型 : DATETIME

浮點(diǎn)數(shù) : DECIMAL

整數(shù) : SIGNED

無符號(hào)整數(shù) : UNSIGNED

11. 函數(shù)名稱不同

ORACLE:SELECT TO_NUMBER('123') AS VALUE FROM DUAL;

MYSQL: SELECT CAST("123" AS SIGNED INTEGER) as value;

SIGNED INTEGER:帶符號(hào)的整形

12. 寫法不同:

ORACLE:select SYSDATE value from dual

MYSQL:select now() value / select sysdate() value

13. 函數(shù)名稱不同:

ORACLE: SELECT ADD_MONTHS(sysdate, 2) as value from DUAL;

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

14. 功能: 返回兩個(gè)日期之間的天數(shù)。

用法:

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

oracle: 直接用兩個(gè)日期相減(比如d1-d2=12.3)

15. Oracle內(nèi)置函數(shù)SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來返回Oracle的錯(cuò)誤代碼和錯(cuò)誤消息。

MYSQL: 可以從JAVA中得到錯(cuò)誤代碼,錯(cuò)誤狀態(tài)和錯(cuò)誤消息

16. Oracle內(nèi)置函數(shù)SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來返回Oracle的錯(cuò)誤代碼和錯(cuò)誤消息。

MYSQL: 可以從JAVA中得到錯(cuò)誤代碼,錯(cuò)誤狀態(tài)和錯(cuò)誤消息

17. 在MYSQL中是自動(dòng)增長列. 如下方法獲取最新ID:

START TRANSACTION;

INSERT INTO user(username,password)

VALUES (username,MD5(password));

SELECT LAST_INSERT_ID() INTO id;

COMMIT;

ORACLE中是使用 SEQUENCE;

oracle所有函數(shù)

1. ascii??

返回與指定的字符對(duì)應(yīng)的十進(jìn)制數(shù);

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

給出整數(shù),返回對(duì)應(yīng)的字符;

SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C

-- -

趙 A

3.INITCAP

返回字符串并將字符串的第一個(gè)字母變?yōu)榇髮?

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? 刪除左邊出現(xiàn)的字符串

RTRIM? 刪除右邊出現(xiàn)的字符串

SQL> select ltrim(rtrim('? jack? ',' '),' ') from dual;

LTRIM(RTRIM('

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

jack

所有函數(shù)鏈接:http://www.shouce.ren/api/oracle/#

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.簡介 數(shù)據(jù)存儲(chǔ)有哪些方式?電子表格,紙質(zhì)文件,數(shù)據(jù)庫。 那么究竟什么是關(guān)系型數(shù)據(jù)庫? 目前對(duì)數(shù)據(jù)庫的分類主要是...
    喬震閱讀 2,011評(píng)論 0 2
  • ORACLE日期時(shí)間函數(shù)大全 TO_DATE格式(以時(shí)間:2007-11-02 13:45:25為例) Year:...
    雨一流閱讀 722評(píng)論 0 2
  • Oracle基礎(chǔ)操作 查看進(jìn)程ps –ef | grep ora 登陸數(shù)據(jù)庫sqlplus sys/123456...
    謎碌小孩閱讀 1,184評(píng)論 0 12
  • 兩年前高考完徒步搭車 川滇 滇藏 青藏線 一個(gè)半月 在旅途結(jié)束的西寧看了電影 回來單曲循環(huán) 16歲便獨(dú)自搭車川藏線...
    巍然如少年閱讀 399評(píng)論 0 2
  • 我夢(mèng)見自己化作一只藍(lán)色羽毛的鳥兒要借夜色旅行從黃昏到黎明希望天空和我一樣顏色藏在松軟軟的云里睡覺再也沒人能看的見我...
    Lpengpengpeng閱讀 269評(píng)論 0 3

友情鏈接更多精彩內(nèi)容