主鍵:
MySql一般使用自動增長類型,在創建表的時候只要指定表的主鍵爲auto increment,插入記錄時就不需要再爲主鍵添加記錄了,主鍵會自動增長。Oracle中沒有自動增長,主鍵一般使用序列,插入記錄時將序列號的下一值付給該字段即可,只是ORM框架只是需要native主鍵生成策略即可。
單引號的處理:
MySql裏可以使用雙引號來包起字符串,Oracle裏要使用單引號包起字符串。
分頁查詢:
這個應該是兩者最明顯的區別了,很多人都知道MySql中分頁很簡單,因爲他有專門的關鍵字limit來實現分頁查詢;
但是Oracle裏面沒有這種關鍵字來實現分頁查詢的,所以它實現起來就比MySql要繁瑣得多了,在每個結果集中只有一個rownum字段標明它的位置,並且只能用rownum<=某個數,不能用rownum>=某個數,因爲ROWNUM是僞列,在使用時所以需要爲ROWNUM取一個別名,變成邏輯列,然後來操作。select * from (select ROWNUM as num,A.* from (select * from test) A where ROWNUM <=40) where num >= 20; 這是這兩者的最大的不同。
數據類型
Oracle中的整型,number(),字符串類型,varchar2()
MySQL中的整型,int(),字符串類型,varchar()
日期
Oracle中的日期,to_date()字符串轉日期,to_char()日期轉字符串,last_day()月的最後一天,add_months()對指定的日期加上指定月,months_between()相差的月,next_day()返回給定日期第二天開始一週內
的指定周幾的日期。
MySQL中的日期,date(),time(),timedate(),timestamp(),Year()
空值
MySQL中的null值處理,用ifnull(),一般用法ifnull(comm,0);
Oracle中的空值處理,用NVL()兩個參數,NVL2()三個參數,其中null在Oracle中最大,在MySQL中最小
去空
MySQL中只有trim(),Oracle中有trim(),ltrim(),rtrim()
分組
group up在Oracle中後面要跟出現的所有字段名,MySQL中可以跟單獨字段
其他
對事務的提交
MySQL默認是自動提交,而Oracle默認不自動提交,需要用戶手動提交,需要在寫commit;指令或者點擊commit按鈕
事務隔離級別
MySQL是read commited(已提交讀)的隔離級別,而Oracle是repeatable read(可重複讀)的隔離級別,默認隔離級別不同
對事務的支持
MySQL在innodb存儲引擎的行級鎖的情況下才可支持事務,而Oracle則完全支持事務
保存數據的持久性
MySQL是在數據庫更新或者重啓,則會丟失數據,Oracle把提交的sql操作線寫入了在線聯機日誌文件中,保持到了磁盤上,可以隨時恢復
備份
MySQL邏輯備份時要鎖定數據,才能保證備份的數據是一致的,影響業務正常的dml使用,Oracle邏輯備份時不鎖定數據,且備份的數據是一致
性能診斷
MySQL的診斷調優方法較少,主要有慢查詢日誌。
Oracle有各種成熟的性能診斷調優工具,能實現很多自動分析、診斷功能。比如awr、addm、sqltrace、tkproof等
權限與安全
MySQL的用戶與主機有關,感覺沒有什麼意義,另外更容易被仿冒主機及ip有可乘之機。
Oracle的權限與安全概念比較傳統,中規中矩。
管理工具
MySQL管理工具較少,在linux下的管理工具的安裝有時要安裝額外的包(phpmyadmin, etc),有一定複雜性。
Oracle有多種成熟的命令行、圖形界面、web管理工具,還有很多第三方的管理工具,管理極其方便高效。
最重要的區別
MySQL是輕量型數據庫,並且免費,沒有服務恢復數據。
Oracle是重量型數據庫,收費,Oracle公司對Oracle數據庫有任何服務。