1. 程式人生 > >三種主流資料庫區別

三種主流資料庫區別

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吧。

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黃金組合”。

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在這方面還是比較的弱

相關推薦

主流資料庫區別

Oracle Oracle 能在所有主流平臺上執行(包括Windows)。完全支援所有的工業標準。採用完全開放策略。可以使客戶選擇最適合的解決方案。對開發商全力支援,Oracle並行伺服器通過使一組結點共享同一簇中的工作來擴充套件Windows NT的能力,提供高可用性

資料庫中truncate、delete、drop刪除的區別

delete:delete from 表名 where **** delete可以刪除行資料,也可以對整表資料刪除,一般與where關聯使用。delete刪除內容,釋放內容空間,但是表結構和表定義不刪除。 truncate:truncate table 表名 trunc

資料庫,部分函式依賴,傳遞函式依賴,完全函式依賴,正規化的區別

要講清楚正規化,就先講講幾個名詞的含義吧: 部分函式依賴:設X,Y是關係R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函式依賴於X。 舉個例子:學生基本資訊表R中(學號,

java中創建線程的方法以及區別

sta tar ati 定義 callable main ring 我們 () Java使用Thread類代表線程,所有的線程對象都必須是Thread類或其子類的實例。Java可以用三種方式來創建線程,如下所示: 1)繼承Thread類創建線程 2)實現Runnable接口

判斷python對象是否可調用的方式及其區別

asa 而不是 sha nbsp strong object 及其 返回 pes 基本上判斷python對象是否為可調用的函數,有三種方法: 1、使用內置的callable函數 callable(func) 用於檢查對象是否可調用,返回True也可能調用失敗,但是返回

./和../和/路徑的區別

text 什麽 mage 鏈接 body bubuko href 根目錄 nbsp 本文為博主原創,未經允許不得轉載: 在JavaScript中,經常用到./和../及/路徑訪問指定的資源,但三者有什麽區別: ./表示當前目錄 ../表示

Java 處理 XML 的主流技術及介紹

lean code except 就是 輕量 性能 廠商 發送 x64 Java 處理 XML 的三種主流技術及介紹 顧彬, 馮晨, 和 喬彬2012 年 8 月 13 日發布 WeiboGoogle+用電子郵件發送本頁面 3

Qt中PushButton的pressed,released,clicked響應的區別

res click ase animate 被調用 區別 調用 按鈕 優先級 Qt的PushButton的常用的三種響應有pressed,released和clicked。 優先級:pressed>released>clicked 按下按鈕pressed函數的內

主流芯片架構

順序串 很好 科技 原因 流水線 當我 電子產品 個人 尋址方式 三種主流芯片架構簡單比較 三種主流芯片架構   1. ARM ARM是高級精簡指令集的簡稱(Advanced RISC Machine),它是一個32位的精簡指令集架構,但也配備16位指令集,一般來講比等價3

檢測數據類型的方式及區別

字符類 == console 布爾 實例對象 ole 方式 con div var a="i am string"; var b=[1,2,3]; var c=new String("abc"); //String類實例對象 //typeof: null 對象 數組

binlog模式的區別(row,statement,mixed)

binlog模式分三種(row,statement,mixed) 1.Row 日誌中會記錄成每一行資料被修改的形式,然後在slave端再對相同的資料進行修改,只記錄要修改的資料,只有value,不會有sql多表關聯的情況。優點:在row模式下,bin-log中可以不記錄執

java中建立執行緒的方法以及區別

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。Java可以用三種方式來建立執行緒,如下所示: 1)繼承Thread類建立執行緒 2)實現Runnable介面建立執行緒 3)使用Callable和Future建立執行緒 下面

建立執行緒的方式和區別

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。Java可以用三種方式來建立執行緒,如下所示: 1)繼承Thread類建立執行緒 2)實現Runnable介面建立執行緒 3)使用Callable和Future建立執行緒 下面讓我們分別來看看這三種建立執行緒的方法。

詳談js對url進行編碼和解碼(方式的區別)

今天在專案中發現一個bug,原作者本意是提取url中的某段資訊與一已知資訊進行比較,如果成立則執行相應程式碼。找來找去發現邏輯並沒有問題,但是前段樣式並沒有改變,通過控制檯列印提取出來的結果,發現是一段UTF8加密的文字,最後進行相應的解碼程式碼才生效。 J

主流晶片架構簡單比較

來源:https://blog.csdn.net/weixin_39752599/article/details/78664055 可以參照的資訊:https://blog.csdn.net/shenghuaDay/article/details/78747561 三種主流晶片架構   1.&n

主流資料庫比較之我們該學習哪資料庫

該帖子是我師傅的傑作,僅供參考(個人推崇MySQL)! 基礎知識 不管你想選擇哪種資料庫產品,有些基礎理論知識必須打紮實,尤其是:資料庫系統概論、Linux作業系統、SQL標準語言、資料結構(重點排序演算法)、開發語言(至少懂幾款指令碼語言,SHELL必須要會,其次最好能再掌握一種指令碼語言,例如:PHP

JAVA迴圈的區別

whiledo whilefor結構while(條件){    迴圈體;}do{    迴圈體;}while(條件);for(初始化變數;迴圈條件;迴圈變數的操作){    迴圈體;}特點先判斷,後執行

C# 訪問類的私有成員的方法與區別

在程式中,難免要訪問某個物件的私有成員。那麼以前實現這類功能的方法有兩種,第一種方法最簡單,就是把成員訪問符從“private”改為“public”即可;而另一個就是提供公有的成員訪問函式來進行訪問。那麼現在用C#編寫程式,就不再需要採用前面所說的兩種方法了,而直接使用屬

position屬性的區別

存在 fixed abs 不同 保留 fix relative 表現 元素 CSS position 屬性通過使用 position 屬性,我們可以選擇 4 種不同類型的定位,這會影響元素框生成的方式。position 屬性值的含義:static元素框正常生成。塊級元素生成

java 建立陣列的方式及區別

建立陣列的三種方式:其實分為2類,一種是靜態的建立,如方式一。一種是動態的建立,只不過根據寫法的不同分為方式二和方式三: public static void main(String[] args) { // 1.方式一 宣告 分配空間並賦值 int[] arr1