Oracle 和 mysql的9點差別。本站提示廣大學習愛好者:(Oracle 和 mysql的9點差別)文章只能為提供參考,不一定能成為您想要的結果。以下是Oracle 和 mysql的9點差別正文
1.組函數用律例則
mysql中組函數在select語句中可以隨便應用,但在oracle中假如查詢語句中有組函數,那其他列名必需是組函數處置過的,或許是group by子句中的列不然報錯
eg:select name,count(money) from user;這個放在mysql中沒有成績在oracle中就有成績了
2.主動增加的數據類型處置
MYSQL有主動增加的數據類型,拔出記載時不消操作此字段,會主動取得數據值。ORACLE沒有主動增加的數據類型,須要樹立一個主動增加的序列號,拔出記載時要把序列號的下一個值賦於此字段。
CREATE SEQUENCE序列號的稱號(最好是表名+序列號標志)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
個中最年夜的值按字段的長度來定,假如界說的主動增加的序列號NUMBER(6),最年夜值為999999
INSERT語句拔出這個字段值為:序列號的稱號.NEXTVAL
3.單引號的處置
MYSQL裡可以用雙引號包起字符串,ORACLE裡只可以用單引號包起字符串。在拔出和修正字符串前必需做單引號的調換:把一切湧現的一個單引號調換成兩個單引號。
4.翻頁的SQL語句的處置
MYSQL處置翻頁的SQL語句比擬簡略,用LIMIT開端地位,記載個數;PHP裡還可以用SEEK定位到成果集的地位。ORACLE處置翻頁的SQL語句就比擬繁瑣了。每一個成果集只要一個ROWNUM字段標明它的地位,而且只能用ROWNUM<100,不克不及用ROWNUM>80。
以下是經由剖析後較好的兩種ORACLE翻頁SQL語句(ID是獨一症結字的字段名):
語句一:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 前提1 ORDER BY 前提2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 前提3;
語句二:
SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 前提1 ORDER BY 前提2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 前提3;
5.長字符串的處置
長字符串的處置ORACLE也有它特別的處所。INSERT和UPDATE時最年夜可操作的字符串長度小於等於4000個單字節,假如要拔出更長的字符串,請斟酌字段用CLOB類型,辦法借用ORACLE裡自帶的DBMS_LOB法式包。拔出修正記載前必定要做停止非空和長度斷定,不克不及為空的字段值和超越長度字段值都應當提出正告,前往前次操作。
6.日期字段的處置
MYSQL日期字段分DATE和TIME兩種,ORACLE日期字段只要DATE,包括年代日時分秒信息,用以後數據庫的體系時光為SYSDATE,准確到秒,或許用字符串轉換成日期型函數TO_DATE(‘2001-08-01','YYYY-MM-DD')年-月-日24小時:分鐘:秒的格局YYYY-MM-DD HH24:MI:SS TO_DATE()還有許多種日期格局,可以參看ORACLE DOC.日期型字段轉換成字符串函數TO_CHAR(‘2001-08-01','YYYY-MM-DD HH24:MI:SS')
日期字段的數學運算公式有很年夜的分歧。MYSQL找到離以後時光7天用DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到離以後時光7天用 DATE_FIELD_NAME >SYSDATE – 7;
MYSQL中拔出以後時光的幾個函數是:NOW()函數以`'YYYY-MM-DD HH:MM:SS'前往以後的日期時光,可以直接存到DATETIME字段中。CURDATE()以'YYYY-MM-DD'的格局前往明天的日期,可以直接存到DATE字段中。CURTIME()以'HH:MM:SS'的格局前往以後的時光,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now())
而oracle中以後時光是sysdate
7.空字符的處置
MYSQL的非空字段也有空的內容,ORACLE裡界說了非空字段就不允許有空的內容。按MYSQL的NOT NULL來界說ORACLE表構造,導數據的時刻會發生毛病。是以導數據時要對空字符停止斷定,假如為NULL或空字符,須要把它改成一個空格的字符串
8.字符串的隱約比擬
MYSQL裡用字段名like%‘字符串%',ORACLE裡也能夠用字段名like%‘字符串%'但這類辦法不克不及應用索引,速度不快,用字符串比擬函數instr(字段名,‘字符串')>0會獲得更准確的查找成果。
9.法式和函數裡,操作數據庫的任務完成後請留意成果集和指針的釋放。