SQL Server,MySQL,Oracle三者的區別

Oracle

Oracle 能在全部主流平臺上運行(包括Windows)。徹底支持全部的工業標準。採用徹底開放策略。可使客戶選擇最適合的解決方案。對開發商全力支持,Oracle並行服務器經過使一組結點共享同一簇中的工做來擴展Windows NT的能力,提供高可用性和高伸縮性的簇的解決方案。若是Windows NT不能知足須要,用戶能夠把數據庫移到UNIX中。Oracle的並行服務器對各類UNIX平臺的集羣機制都有着至關高的集成度。Oracle得到最高認證級別的ISO標準認證.Oracle性能最高,保持開放平臺下的TPC-D和TPC-C的世界記錄Oracle多層次網絡計 算,支持多種工業標準,能夠用ODBC、JDBC、OCI等網絡客戶鏈接。
Oracle 在兼容性、可移植性、可聯結性、高生產率上、開放性也存在優勢。Oracle產品採用標準SQL,並通過美國國家標準技術所(NIST)測試。與 IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。 Oracle的產品可運行於很寬範圍的硬件與操做系統平臺上。能夠安裝在70種以上 不一樣的大、中、小型機上;可在VMS、DOS、UNIX、WINDOWS等多種操做系統下工做。能與多種通信網絡相連,支持各類協議(TCP/IP、 DECnet、LU6.2等)。提供了多種開發工具,能極大的方便用戶進行進一步的開發。Oracle良好的兼容性、可移植性、可鏈接性和高生產率是 Oracle RDBMS具備良好的開放性。
Oracle價格是比較昂貴的。聽說一套正版的Oracle軟件早在2006年年末的時候在市場上的價格已經達到了6位數。因此若是你的項目不是那種超級大的項目,仍是放棄Oracle吧。php

SQL Server

SQL Server 是 Microsoft推出一套產品,它具備使用方便、可伸縮性好、與相關軟件集成程度高等優勢,逐漸成爲Windows平臺下進行數據庫應用開發較爲理想的 選擇之一。SQLServer是目前流行的數據庫之一,它已普遍應用於金融、保險、電力、行政管理等與數據庫有關的行業。並且,因爲其易操做性及友好的界 面,贏得了廣大用戶的青睞,尤爲是SQLServer與其它數據庫,如Access、FoxPro、Excel等有良好的ODBC接口,能夠把上述數據庫 轉成SQLServer的數據庫,所以目前愈來愈多的讀者正在使用SQLServer。
SQL Server因爲是微軟的產品,又有着如此強大的功能,因此他的影響力是幾種數據庫系統中比較大,用戶也是比較多的。它通常是和同是微軟產品的.net平臺一塊兒搭配使用。固然其餘的各類開發平臺,都提供了與它相關的數據庫鏈接方式。所以,開發軟件用SQL Server作數據庫是一個正確的選擇。數據庫

MySQL

MySQL不支持事務處理,沒有視圖,沒有存儲過程和觸發器,沒有數據庫端的用戶自定義函數,不能徹底使用標準的SQL語法。 
從數據庫行家據說的第一件事就是MySQL缺少transactions,rollbacks, 和subselects的功能。若是你計劃使用MySQL寫一個關於銀行、會計的應用程序,或者計劃維護一些隨時須要線性遞增的不一樣類的計數器,你將缺少transactions功能。在現有的發佈版本的 MySQL下,請不要有任何的這些想法。(請注意,MySQL的測試版3.23.x系列如今已經支持transactions了)。 
  在很是必要的狀況下,MySQL的侷限性能夠經過一部分開發者的努力獲得克服。在MySQL中你失去的主要功能是subselect語句,而這正是其它的全部數據庫都具備的。換而言之,這個失去的功能是一個痛苦。 
MySQL無法處理複雜的關聯性數據庫功能,例如,子查詢(subqueries),雖然大多數的子查詢均可以改寫成join 
另外一個MySQL沒有提供支持的功能是事務處理(transaction)以及事務的提交(commit)/撤銷(rollback)。一個事務指的是被看成一個單位來共同執行的一羣或一套命令。若是一個事務無法完成,那麼整個事務裏面沒有一個指令是真正執行下去的。對於必須處理線上訂單的商業網站來講,MySQL沒有支持這項功能,的確讓人以爲很失望。可是能夠用MaxSQL,一個分開的服務器,它能經過外掛的表格來支持事務功能。  
外鍵(foreignkey)以及參考完整性限制(referentialintegrity)可讓你制定表格中資料間的約束,而後將約束 (constraint)加到你所規定的資料裏面。這些MySQL沒有的功能表示一個有賴複雜的資料關係的應用程序並不適合使用MySQL。當咱們說 MySQL不支持外鍵時,咱們指的就是數據庫的參考完整性限制--MySQL並無支持外鍵的規則,固然更沒有支持連鎖刪除(cascadingdelete)的功能。簡短的說,若是你的工做須要使用複雜的資料關聯,那你仍是用原來的Access吧。  
你在MySQL中也不會找到存儲進程(storedprocedure)以及觸發器(trigger)。(針對這些功能,在Access提供了相對的事件進程(eventprocedure)。
MySQL+php+apache三者被軟件開發者稱爲「php黃金組合」。apache

Oracle和MySQL的主要區別

Oracle:客戶端和命令窗口,都是由用戶決定內容-> conn user_name/password;

MySQL:客戶端和命令窗口,都是由數據庫決定內容-> use datebase;

均可以建立多數據庫多用戶,我的傾向於Oracle一個數據庫中多個用戶的形式,MySQL多個數據庫多個用戶形式(最好每一個數據庫對應一個用戶)服務器

Oracle是大型數據庫而MySQL是中小型數據庫,Oracle市場佔有率達40%,MySQL只有20%左右,同時MySQL是開源的而Oracle價格很是高。

Oracle支持大併發,大訪問量,是OLTP(On-Line Transaction Processing聯機事務處理系統)最好的工具。

安裝所用的空間差異也是很大的,MySQL安裝完後才152M而Oracle有3G左右,且使用的時候Oracle佔用特別大的內存空間和其餘機器性能。

Oracle也與MySQL操做上的一些區別

組函數用法規則

MySQL中組函數在select語句中能夠隨意使用,但在Oracle中若是查詢語句中有組函數,那其餘列名必須是組函數處理過的,或者是group by子句中的列不然報錯
eg:
select name,count(money) from user;這個放在MySQL中沒有問題在Oracle中就有問題了。網絡

自動增加的數據類型處理

MySQL有自動增加的數據類型,插入記錄時不用操做此字段,會自動得到數據值。Oracle沒有自動增加的數據類型,須要創建一個自動增加的序列號,插入記錄時要把序列號的下一個值賦於此字段。
CREATE SEQUENCE序列號的名稱(最好是表名+序列號標記)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的長度來定,若是定義的自動增加的序列號NUMBER(6),最大值爲999999
INSERT語句插入這個字段值爲:序列號的名稱.NEXTVAL併發

單引號的處理

MySQL裏能夠用雙引號包起字符串,Oracle裏只能夠用單引號包起字符串。在插入和修改字符串前必須作單引號的替換:把全部出現的一個單引號替換成兩個單引號。框架

翻頁的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;工具

長字符串的處理

長字符串的處理Oracle也有它特殊的地方。INSERT和UPDATE時最大可操做的字符串長度小於等於4000個單字節,若是要插入更長的字符串,請考慮字段用CLOB類型,方法借用Oracle裏自帶的DBMS_LOB程序包。插入修改記錄前必定要作進行非空和長度判斷,不能爲空的字段值和超出長度字段值都應該提出警告,返回上次操做。性能

日期字段的處理

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

空字符的處理

MySQL的非空字段也有空的內容,Oracle裏定義了非空字段就不允許有空的內容。按MySQL的NOT NULL來定義Oracle表結構,導數據的時候會產生錯誤。所以導數據時要對空字符進行判斷,若是爲NULL或空字符,須要把它改爲一個空格的字符串。

字符串的模糊比較

MySQL裏用字段名like%'字符串%',Oracle裏也能夠用字段名like%'字符串%'但這種方法不能使用索引,速度不快,用字符串比較函數instr(字段名,'字符串')>0會獲得更精確的查找結果。

程序和函數裏,操做數據庫的工做完成後請注意結果集和指針的釋放。

主鍵

MySQL通常使用自動增加類型,在建立表時只要指定表的主鍵爲auto increment,插入記錄時,不須要再指定該記錄的主鍵值,MySQL將自動增加;Oracle沒有自動增加類型,主鍵通常使用的序列,插入記錄時將序列號的下一個值付給該字段便可;只是ORM框架是隻要是native主鍵生成策略便可。

Oracle實現了ANSIISQL中大部分功能,如,事務的隔離級別、傳播特性等而MySQL在這方面仍是比較的弱

相關文章
相關標籤/搜索