1. 程式人生 > >oracle和mysql的幾點重要區別總結

oracle和mysql的幾點重要區別總結

最近,實際專案的開發中,將mysql遷移到了oracle,發現mysql與oracle在sql語句的處理上存在很大的差別,今天就兩大資料庫的差別做一下簡要的總結:

總括:

1.oracle是大型資料庫且價格昂貴;mysql是中小型資料庫且開源。

2.oracle支援高併發,高吞吐量,是OLTP的最好的工具;mysql的之所以強大是由於內在的外掛式儲存引擎,InnoDB引擎也支援OLTP,mysql的儲存引擎是mysql的核心。

3.安裝空間的佔用不同:oracle在pc上安裝後有好幾個G且每次開啟oracle伺服器後,pc記憶體一下上升很多,導致pc很卡頓;mysql很輕量,安裝後才200M左右。

4.目前,oracle的市場佔有率相比mysql要大,但隨著mysq開源且儲存引擎的強大,mysql的市場佔有率有上升的趨勢,mysql在企業中使用率很普遍,甚至有的企業編寫適合的自     己的mysql儲存引擎來用。

下面,詳細說下oracle,mysql在sql語句處理上存在的差別:

1.主鍵自增處理的差別:mysql中在建立表時指明欄位為auto increment後,插入資料的時候就會自動增長,例如欄位id為主鍵,在insert語句中如insert into user(id,name) values(null,"louis");這樣表明要插入的id為自增欄位;oracle中要用序列sequence來解決主鍵自增的問題,sql語句舉例:create sequence sqe1 minvalue 1 maxvalue 99999999 increment by 1 start with 1;   /*表明步長為1,最小值為1,最大值為99999999的自增長的序列,序列名為sqe1*/,在insert語句中使用如insert into user(\"id\",\"name\") values(sqe1.nextval,"louis");/*這裡的sql語句用到了字元轉義,為什麼要這樣做下面會提到 */

2.單引號處理的差別:mysql中可用雙引號包字串;oracle中只能用單引號包字串,在插入和修改字串前必須把出現的一個單引號的替換成兩個單引號。

oracle中sql語句錯誤總結:

1.多寫逗號,如select stuId,stuName, from user; 執行 sql出現異常為Cause: java.sql.SQLException: ORA-00936: 缺失表示式

2.在mybatis框架中使用配置檔案時,在sql語句多寫一個分號,執行sql會出現 異常為Caused by: java.sql.SQLException: ORA-00911: 無效字元

3.\"id\" 異常為error code [17004]; 無效的列型別; nested exception is java.sql.SQLException

解決辦法:\"id\"必須為大寫\"ID\",欄位名ID必須和資料庫表中的欄位名相同

注:oracle 中允許在sql檔案中使用轉義處理字元,若不處理會出現無效列型別的異常,這是由於id是oracle的關鍵字引起的

 /*查詢oracle關鍵字的sql:SELECT * FROM  V$RESERVED_WORDS; */

4.出現異常為無效的列型別; nested exception is java.sql.SQLException java.sql.SQLException error code [17059] 無法轉換為內部表示

原因:資料庫裡的欄位型別與Java裡對映該欄位屬性的型別不能對應轉換,如資料庫裡欄位型別為varchar,而Java定義的型別為int;或者資料庫裡為number,而Java定義的對應屬性型別為String......)

解決辦法:將資料庫中的欄位屬性和java裡面的對映欄位的屬性保持相同即可

轉自:https://blog.csdn.net/u012990533/article/details/41130567