SQL Server和MySQL數據庫

導讀:接下來的網上商城的項目,須要用到MySQL數據庫了。這個對於我來講,是一個新接觸的東西,按照慣例,在剛開始學習一個東西的時候,先從宏觀上去了解它。本篇博客,先介紹SQL Server的基本內容,而後介紹MySQL的基本內容,最後介紹二者之間的區別。php


1、SQL Server基本簡介

1.1,概述

SQL Server 是Microsoft 公司推出的關係型數據庫管理系統。具備使用方即可伸縮性好與相關軟件集成程度高等優勢,可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2012 的大型多處理器的服務器等多種平臺使用。
Microsoft SQL Server 是一個全面的數據庫平臺,使用集成的商業智能 (BI)工具提供了企業級的數據管理。Microsoft SQL Server 數據庫引擎爲關係型數據和結構化數據提供了更安全可靠的存儲功能,使您能夠構建和管理用於業務的高可用和高性能的數據應用程序。
mysql

1.2,應用範圍

SQL Server的應用範圍,和其具體的版本有必定的關係,基本上是:企業版(Enterprise Edition) (大中型企業商用);標準版(Standard Edition) (小型企業商用);開發版(Developer Edition) (開發公司、開發人員使用);我的版(Personal Edition) (開發人員使用);MSDE 2000(Microsoft SQL Server 2000 Desktop Engine)(簡單的單機數據庫、開發人員開發測試使用)算法

1.3,優缺點

(1) 擴展性強:當系統要更高數據庫處理速度時,只要簡單地增長數據庫服務器就 能夠獲得擴展。
(2) 可維護性:當某節點發生故障時,系統會自動檢測故障並轉移故障節點的應用,保證數據庫的持續工做。
(3) 安全性:由於數據會同步的多臺服務器上,能夠實現數據集的冗餘,經過多份數據來保證安全性。另外它成功地將數據庫放到了內網之中,更好地保護了數據庫的安全性。
(4) 易用性:對應用來講徹底透明,集羣暴露出來的就是一個IP
(1) 不可以按照Web服務器的處理能力分配負載。
(2) 負載均衡器(控制端)故障,會致使整個數據庫系統癱瘓。
sql

1.4,基本語法

增:insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)數據庫

刪:delete from 數據表 where 條件表達式express

改:update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式apache

查:select * from 數據表 where 字段名=字段值 order by 字段名 [desc]編程


2、MySQL基本簡介

2.1,概述

MySQL是一個關係型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關係型數據庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。MySQL 所使用的 SQL 語言是用於訪問數據庫的最經常使用標準化語言。
windows

2.2,應用範圍

Web網站系統:安裝配置簡單,性能優越,開源。
跨域

日誌管理系統:高效的插入和查詢功能,若是設計地較好,在使用MyISAM存儲引擎的時候,二者能夠作到互不鎖定,達到很高的併發性能。

數據倉庫系統:在急需大量存儲的空間和高效率的數據分析的需求下,目前基本有三種方式能夠解決這一問題:1,採用昂貴的高性能主機以提升計算性能,用高端存儲設備提升I/O性能,效果理想,可是成本很是高;2,經過將數據複製到多臺使用大容量硬盤的廉價pcserver上,以提升總體計算性能和I/O能力,效果尚可,存儲空間有必定限制,成本低廉;,3,經過將數據水平拆分,使用多臺廉價的pcserver和本地磁盤來存放數據,每臺機器上面都只有全部數據的一部分,解決了數據量的問題,全部pcserver一塊兒並行計算,也解決了計算能力問題,經過中間代理程序調配各臺機器的運算任務,既能夠解決計算性能問題又能夠解決I/O性能問題,成本也很低廉。對於第二個和第三個,MySQL都有很大的優點(跨域的簡單複製、免費)。

嵌入式系統:嵌入式環境對軟件系統最大的限制是硬件資源很是有限,在嵌入式環境下運行的軟件系統,必須是輕量級低消耗的軟件。MySQL有專門針對嵌入式系統的版本。

2.3,優缺點

1,支持5000萬條記錄的數據倉庫;2,適應於全部的平臺;3,是開源軟件,版本更新較快;4,性能很出色。純粹就性能而言,MySQL是至關出色的,由於它包含一個缺省桌面格式MyISAM。MyISAM 數據庫與磁盤很是地兼容而不佔用過多的CPU和內存。MySQL能夠運行於Windows系統而不會發生衝突,在UNIX或相似UNIX系統上運行則更好。能夠經過使用64位處理器來獲取額外的一些性能。由於MySQL在內部裏不少時候都使用64位的整數處理;5,價格便宜


缺點: 缺少一些存儲程序的功能,不支持陌生的關鍵字,採用缺省的端口IP(也是優勢),容易被黑客侵入。MyISAM(MySQL的默認存儲引擎,另外一個是innoDB)並不支持事務處理。

2.4,基本語法

MySQL的基本語法和SQL Server基本相同。

 

3、聯繫和區別

聯繫:都是屬於關係型的數據庫,都是目前的主流數據庫,其基本操做語法相同。

區別:最大的區別就是,MySQL是開源的。開源的,意味着什麼?

 

SQL Server數據庫和MySQL數據庫有什麼區別呢?詳細不少初入IT行業的朋友對於SQL Server數據庫和MySQL數據庫常常搞混,認爲這兩種數據庫是同一種,其實否則,今天咱們來分析一下這兩種數據庫的不一樣之處:
SQL Server數據庫和MySQL數據庫有什麼區別
    1,優勢分析:MYSQL短小精悍,容易上手,操做簡單,免費供用的。相對其它數據庫有特點又實用的語法多一些。SQL怎麼也算是大型數據庫,穩定,能作通常大系統的數據倉庫,運行速度明顯比MYSQL快N多(海量數據下這個優點顯而易見)。

    2,缺點分析:MYSQL難擔當大系統的數據倉庫,運行速度慢,不夠穩定,有掉線的狀況。SQLSERVER價格貴(固然沒說5元盜版),使用起來比MYSQL要難一些,畢竟東西大了說道多點。

    3,按你的補充(如何登陸):MySQL本身有文字界面客戶端,用起來咋說也沒鼠標點方便(不過習慣了也好),固然配對MYSQL有專業的客戶端軟件,我是用SQLYOG519版的,各類操做真的是很方便的說。SQLSERVER 就用自帶的查詢分析器登陸了:)二者的前提是數據庫服務都帶打開,並且你得知道安裝時的用戶名密碼哦:)

    對於程序開發人員而言,目前使用最流行的兩種後臺數據庫即爲MySQL and SQLServer。這二者最基本的類似之處在於數據存儲和屬於查詢系統。你可使用SQL來訪問這兩種數據庫的數據,由於它們都支持ANSI-SQL。還有,這兩種數據庫系統都支持二進制關鍵詞和關鍵索引,這就大大地加快了查詢速度。同時,兩者也都提供支持XML的各類格式。除了在顯而易見的軟件價格上的區別以外,這兩個產品還有什麼明顯的區別嗎?在這兩者之間你是如何選擇的?讓咱們看看這兩個產品的主要的不一樣之處,包括髮行費用,性能以及它們的安全性。
 
    根本的區別是它們遵循的基本原則
 
兩者所遵循的基本原則是它們的主要區別:開放vs保守。SQL服務器的狹隘的,保守的存儲引擎與MySQL服務器的可擴展,開放的存儲引擎絕然不一樣。雖然你可使用SQL服務器的Sybase引擎,但MySQL可以提供更多種的選擇,如MyISAM,Heap, InnoDB, and BerkeleyDB。MySQL不徹底支持陌生的關鍵詞,因此它比SQL服務器要少一些相關的數據庫。同時,MySQL也缺少一些存儲程序的功能,好比MyISAM引擎聯支持交換功能。
 
    發行費用:MySQL不全是免費,但很便宜
 
    當說起發行的費用,這兩個產品採用兩種絕然不一樣的決策。對於SQL服務器,獲取一個免費的開發費用最常的方式是購買微軟的Office或者VisualStudio的費用。可是,若是你想用於商業產品的開發,你必須還要購買SQL Server StandardEdition。學校或非贏利的企業能夠不考慮這一附加的費用。
 
    性能:先進的MySQL
 
    純粹就性能而言,MySQL是至關出色的,由於它包含一個缺省桌面格式MyISAM。MyISAM數據庫與磁盤很是地兼容而不佔用過多的CPU和內存。MySQL能夠運行於Windows系統而不會發生衝突,在UNIX或相似UNIX系統上運行則更好。你還能夠經過使用64位處理器來獲取額外的一些性能。由於MySQL在內部裏不少時候都使用64位的整數處理。Yahoo!商業網站就使用MySQL做爲後臺數據庫。
 
    當說起軟件的性能,SQL服務器的穩定性要比它的競爭對手強不少。可是,這些特性也要付出代價的。好比,必須增長額外複雜操做,磁盤存儲,內存損耗等等。若是你的硬件和軟件不能充分支持SQL服務器,我建議你最好選擇其餘如DBMS數據庫,由於這樣你會獲得更好的結果。
 
    安全功能
 
    MySQL有一個用於改變數據的二進制日誌。由於它是二進制,這一日誌可以快速地從主機上覆制數據到客戶機上。即便服務器崩潰,這一二進制日誌也會保持完整,並且複製的部分也不會受到損壞。
 
    在SQL服務器中,你也能夠記錄SQL的有關查詢,但這須要付出很高的代價。
 
安全性
 
   這兩個產品都有本身完整的安全機制。只要你遵循這些安全機制,通常程序都不會出現什麼問題。這二者都使用缺省的IP端口,可是有時候很不幸,這些IP也會被一些黑客闖入。固然,你也能夠本身設置這些IP端口。
 
    恢復性:先進的SQL服務器
 
    恢復性也是MySQL的一個特色,這主要表如今MyISAM配置中。這種方式有它固有的缺欠,若是你不慎損壞數據庫,結果可能會致使全部的數據丟失。然而,對於SQL服務器而言就表現得很穩鍵。SQL服務器可以時刻監測數據交換點並可以把數據庫損壞的過程保存下來。
 
    根據須要決定你的選擇
 
    對於這兩種數據庫,若是非要讓我說出到底哪種更加出色,也許我會讓你失望。以個人觀點,任一對你的工做有幫助的數據庫都是很好的數據庫,沒有哪個數據庫是絕對的出色,也沒有哪個數據庫是絕對的差勁。我想要告訴你的是你應該多從你本身的須要出發,即你要完成什麼樣的任務?而不要單純地從軟件的功能出發。
 
    若是你想創建一個.NET服務器體系,這一體系能夠從多個不一樣平臺訪問數據,參與數據庫的管理,那麼你能夠選用SQL服務器。若是你想創建一個第三方站點,這一站點能夠從一些客戶端讀取數據,那麼MySQL將是最好的選擇。

 

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

 

SQL,在這裏我理解成SQL Server。三者是目前市場佔有率最高(依安裝量而非收入)的關係數據庫,並且頗有表明性。排行第四的DB2(屬IBM公司),與Oracle的定位和架構很是類似,就不贅述了。

  1. 若是要說明三者的區別,首先就要從歷史入手。
    1. Oracle:中文譯做甲骨文,這是一家傳奇的公司,有一個傳奇的大老闆Larry Ellision.Ellision 32歲還一事無成,讀了三個大學,沒獲得一個學位文憑,換了十幾家公司,老婆也離甲基
      成立於1977年,早期的理論基礎,反而來自於一篇IBM的論文「數據的關係模型」 。他而去。開始創業時只有1200美圓,卻使得Oracle公司連續12年銷售額每一年翻一番。對於大型共享數據庫「【1】。做者CODD選取了關係代數的五種運算,並基於運算,架構了一種新型的數據存儲模型。基於這種模型,Oracle成爲了一個很是典型的關係數據庫。所以也變的嚴謹,安全,高速,穩定,而且變的愈來愈龐大。
      因爲其誕生早,結構嚴謹,高可用,高性能等特色,使其在傳統數據庫應用中大殺四方,金融,通訊,能源,運輸,零售,製造等各個行業的大型公司基本都是用了甲骨文,早些年的時候,界500強幾乎100%都是甲骨文的用戶。
    2. MySQL:MySQL的最初的核心思想,主要是開源,簡便易用。其開發可追溯至1985年,而第一個內部發行版本誕生,已是1995年。到1998年,MySQL已經能夠支持10中操做系統了,其中就包括win平臺。但依然問題多多,如不支持事務操做,子查詢,外鍵,存儲過程和視圖等功能。下圖是一個截止至2006年的數據庫市場佔有率【2】:
      &amp; amp; lt; img src =&quot; https://pic4.zhimg.com/50/e3b780fc23cec291be3159fe91e4fc3b_hd.jpg" 數據rawwidth = QUOT; 485&QUOT; 數據rawheight = QUOT; 255&QUOT; class =&quot; origin_image zh-lightbox-thumb&quot; 寬度= QUOT; 485&QUOT; 數據原始= QUOT; HTTPS://pic4.zhimg.com/e3b780fc23cec291be3159fe91e4fc3b_r.jpg"&放大器;放大器; GT;圖中能夠看出,MySQL的的爆發實際是在01,02年,尤爲是02年發佈的4.0測試版,正式選定的InnoDB做爲默認引擎,對事務處理能力及數據緩存能力有了極大的提升。同年4.1版開始支持子查詢,至此MySQL的終於蛻變成一個成熟的關係型數據庫系統。05年的5.0版本又添加了存儲過程,服務端遊標,觸發器,查詢優化以及分佈式事務功能,但同年被甲骨文抄了後路時,InnoDB被甲骨文08年收編,MySQL的被太陽收購,09年,甲骨文收購孫了MySQL的和。圖中能夠看出,MySQL的爆發實際是在01,02年,尤爲是02年發佈的4.0 Beta版,正式選定InnoDB做爲默認引擎,對事務處理能力及數據緩存能力有了極大的提升。同年4.1版開始支持子查詢,至此MySQL的終於蛻變成一個成熟的關係型數據庫系統。05年的5.0版本又添加了存儲過程,服務端遊標,觸發器,查詢優化以及分佈式事務功能,但同年被甲骨文抄了後路時,InnoDB被甲骨文08年收編,MySQL的被太陽收購,09年,甲骨文收購了太陽和MySQL的。
      因爲MySQL的的早期定位,其主要應用場景就是互聯網開發。基本上,互聯網的爆發成就MySQL的了,LAMP架構風靡天下。而因爲MySQL的更多的的追求輕量,易用,以及早期的事物操做及複雜查詢優化的缺失,在傳統的數據庫應用場景中,份額極少。
    3. SQL Server:一提到SQL Server,你們通常都只想到Microsoft SQL Server,而非Sybase SQL Server.SQL Server最初是由Microsoft,Sybase和Ashton-Tate三家公司攔下的生意,是爲IBM(又出現了)公司的OS / 2操做系統開發的。隨着OS / 2項目的失敗,你們也分道揚鑣。微軟天然轉向本身的win操做系統,做爲windows NT軟件方案的一部分。而Sybase則專一於Linux / Unix方向的數據庫開發
      .MS SQL Server主要面向中小企業。其最大的優點就是在於集成了MS公司的各種產品及資源,提供了強大的可視化界面,高度集成的管理開發工具,在快速構建商業智能(BI )方面很有建樹.MS SQL Server是MS公司在軟件集成方案中的重要一環,也爲WIN系統在企業級應用中的普及作出了很大貢獻。
  2. 應用解詞場景
    關於「大型數據庫」,並無嚴格的界定,有說以數據量爲準,有說以恢復時間爲準若是綜合數據庫應用場景來講,大型數據庫應用有如下特色:海量數據,高吞吐量;複雜邏輯,高計算量,以及高可用性。從這點上來講,Oracle,DB2就是比較典型的大型數據庫,Sybase SQL Server也算是吧。下面分別說明以前三種數據庫的應用場景。
    1. Oracle.Oracle的應用,主要在傳統行業的數據化業務中,好比:銀行,金融這樣的對可用性,健壯性,安全性,實時性要求極高的業務;零售,物流這樣對海量數據存儲分析要求很高的業務此外,高新制造業如芯片廠也基本都離不開甲骨文;電商也有不少使用者,如京東(正在投奔甲骨文),阿里巴巴(計劃去甲骨文化)並且因爲甲骨文對複雜計算,統計分析的強大支持,在互聯網數據分析,數據挖掘方面的應用也愈來愈多一個典型場景是這樣的
      某電信公司(非國內)下屬某分公司的數據中心,有4臺的Oracle Sun的大型服務器用來安裝Solaris操做系統和Oracle並提供計算服務,3臺Sun存儲磁盤陣列來提供Oracle數據存儲,12臺IBM小型機,一臺Oracle Exadata服務器,一臺500T的磁帶機用來存儲歷史數據,聖鏈接內網,使用。Tuxedo的中間件來保證擴展性和無損遷移創建支 高併發的甲骨文數據庫,經過OLTP系統用來對海量數據實時處理,操做,創建高運算量的甲骨文數據倉庫,用OLAP系統用來分析營收數據及提供自動報表。總預算約750萬美金。
    2. MySQL.MySQL基本是生於互聯網,長於互聯網。其應用實例也大都集中於互聯網方向時,MySQL的高併發存取能力並不比大型數據庫差,同時價格便宜,安裝使用簡便快捷,深受廣大互聯網公司的喜好而且因爲MySQL的的開源特性,針對一些對數據庫有特別要求的應用,能夠經過修改代碼來實現定向優化,例如SNS,LBS等互聯網業務一個典型的應用場景是:。
      某互聯網公司,成立之初,僅有電腦數臺,經過LAMP架構迅速搭起網站框架。隨着業務擴張,市場擴大,迅速發展成爲6臺戴爾小型機的中型網站。如今花了三年,終於成爲垂直領域的最大網站,計劃中的數據中心,擁有戴爾機架式服務器40臺,總預算20萬美金。
    3. MS SQL Server.windows生態系統的產品,好處壞處都很分明。好處就是,高度集成化,微軟也提供了整套的軟件方案,基本上一套win系統裝下來就齊活了。所以,不那麼缺錢,但很缺IT人才的中小企業,會偏心MS SQL Server。例如,自建ERP系統,商業智能,垂直領域零售商,餐飲,事業單位等等。
      1996年,比爾蓋茨親自出手,從Borland挖掘來了大牛Anders,搞定了C#語言。微軟02年搞定了。成熟的.NET,Silverlight技術,爲MS SQL Server贏得了部分互聯網市場,其中就有曾經的全球最大社交網站MySpace,其發展歷程頗有表明性,可做爲一個比較特別的例子【3】。其巔峯時有超過1.5億的註冊用戶及每個月400億的訪問量。應該算是MS SQL Server支撐的最大的數據應用了。
  3. 架構其實要說執行的區別,主要仍是架構的區別正是架構致使了相同的SQL在執行過程當中的解釋,優化,效率的差別這裏只作粗略說明,就不細說了。:
    1. Oracle:數據文件包括:控制文件,數據文件,重作日誌文件,參數文件,歸檔文件,密碼文件。這是根據文件功能行進行劃分,而且全部文件都是二進制編碼後的文件,對數據庫算法效率有極大的提升。因爲Oracle文件管理的統一性,就能夠對SQL執行過程當中的解析和優化,指定統一的標準:
      RBO(基於規則的優化器),CBO(基於成本的優化器)
      經過優化器的選擇,以及無敵的HINT規則,給與了SQL優化極大的自由,對CPU,內存,IO資源進行方方面面的優化。
    2. MySQL:最大的一個特點,就是自由選擇存儲引擎。每一個表都是一個文件,均可以選擇合適的存儲引擎。常見的引擎有InnoDB,MyISAM,NDBCluster等。但因爲這種開放插件式的存儲引擎,好比要求數據庫與引擎之間的鬆耦合關係。從而致使文件的一致性大大下降。在SQL執行優化方面,也就有着一些不可避免的瓶頸。在多表關聯,子查詢優化,統計函數等方面是軟肋,並且只支持極簡單的提示。
    3. SQL Server:數據架構基本是縱向劃分,分爲:Protocol Layer(協議層),Relational Engine(關係引擎),Storage Engine(存儲引擎),SQLOS.SQL執行過程就是逐層解析的過程,其中Relational Engine中的優化器,是基於成本的(CBO),其工做過程跟甲骨文是很是類似的在成本之上也是支持很豐富的HINT,包括:鏈接提示,查詢提示,表提示。 
    4. 做者:孫文亮
      連接:HTTPS://www.zhihu.com/question/19866767/answer/14942009
      來源:知乎
      。著做權歸做者全部商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

       

 

Mysql的與甲骨文的50個區別

 

      1.有些人說Oracle沒有限制,實際上他們說得多是Oracle不支持LIMIT語法。不過能夠rownum虛列來實現,不過會更加麻煩。



  2. Oracle不支持偏移(偏移)語法。


  3. Oracle的複製功能可能比MySQL更加健壯,不過也更加難以配置。


  4.對於多個Master類型的系統,大部分用戶都但願你使用更加複雜也更加昂貴的Oracle RAC(雖然可能NDB更加健壯)。


  5. Oracle的分區功能很是健壯,可是它不是內置的,並須要專門爲此付費(分區功能是在Enterprise Edition裏面是內置的)。


  6.在Linux / Unix上,Oracle並不象Mysql那麼方便,不少Linux / Unix發行版默認就會自帶Mysql。(我對這一點的理解與翻譯可能都有誤差)7。INSERT


  ... ON DUPLICATE KEY UPDATE語法將再也不可用,不過你須要學習更加複雜(可是符合SQL標準)的MERGE語法。


  8. Oracle的ROLE架構與MySQL有很大差別,沒法再使用root角色來完整全部工做。(不過Sys用戶的權限仍然與root相差無幾,只是爲了安全着想,不建議這麼使用了)。


  9.角色賬戶與特定的Schema聯繫在一塊兒(反之也同樣),相似於MySQL數據庫中的數據庫概念。(角色並不徹底與Schema聯繫在一塊兒,系統有一些固定的角色,這些角色包含部分已經定義好的權限集(privilege set),也能夠再自定義部分新的角色)。


  10.事實上,丟棄一切已知的關於鏈接訪問的設置吧,Oracle使用一套全新的系統來處理鏈接訪問。


  11.支持全文搜索,不過語法徹底不一樣。


  12. Oracle的文檔很是豐富,不過,若是須要Oracle的專業服務,你須要擁有Metalink的訪問權限。


  13.在非數據庫社區很難找到相關的支持信息(例如,PHP論壇或者網站開發者的網誌)


  14。自增功能能夠經過Trigger與sequ​​ence對象來實現。


  15.大量平常熟悉的SHOW命令將再也不可用,想要獲取系統信息,須要你學習Oracle的數據字典(或信息Schema),深刻一點的還須要學習Oracle動態性能。


  16. MySQL爲信息Schema添加了多個非標準的擴展,在Oracle中將很難找到這些信息。


  17.爲了管理好生產系統與非生產系統的的轉入轉出,須要你深刻理解Oracle的受權規則。


  18.大致上講,Oracle的數值類型更加簡單,若是你確實須要相似於MySQL的多粒度的數值類型,就須要你本身來實現它,或者經過制定不一樣的精度(Number(n,x))來實現。


  19.在Oracle中,表能夠作到無限制的增加,可是大部分狀況下,都建議經過表空間(tablespace)來對此做細粒度的管理。


  20. Oracle不支持ALTER TABLE ADD COLUMN BEFORE | AFTER,也就是不支持本身制定字段的位置。(咱們這邊以前有部分應用對字段順序有嚴格地要求,不過,從理論上講,這是業務設計的問題,主要是其大部分狀況下都是使用select *或者插入表
值來處理數據,而不是在選擇,插入中指定具體須要處理的字段名列表)。


  21.若是你習慣於經過圖形界面(GUI)來管理數據庫,你必定會喜歡上Oracle,可是若是你傾向於使用相似與Mysql命令行的客戶端,你可能會對sql * plus這個客戶端工具感到失望(須要一個習慣的過程,在SQL * Plus仍是蠻好用的)。


  22. Oracle的數據校驗比Mysql更加嚴格,依賴於MySQL的模糊規則可能會致使應用沒法運行.MySQL接受「0000-00-00」來做爲日期類型的值就是個典型的例子。


  23.雖然Oracle的PL / SQL功能更強,可是它不支持標準的PSM語言來編寫存儲過程,所以你可能不得不學習它的非標準的語法。


  24. Oracle不支持ENUM數據類型,只能經過使用基於文本的check約束或者建立外鍵關聯表來實現。


  25. Mysql的一些更加神祕的表類型(例如,blackhole,csv),在Oracle中找不到相對應的功能。(不清楚blockhole是何種類型,不過Oracle的外部表(外部表)確實是支持csv格式的,在11g版本中還支持對此文件的壓縮/加密以及其餘處理)。


  26. Oracle中的Group By語句必須是肯定的,它須要從列句中選擇列出中出現的全部列都必須包含在group中。


  27. Oracle的exp命令輸出的dmp文件沒法象Mysql的轉儲文件同樣能夠手工修改。


  28. Oracle的底層實現有較大變化,須要你學習UNDO與REDO段,歸檔,以及DBWR進程。(我的認爲甲骨文相對於其餘數據庫的主要的優點可能就是其撤消/重作的設計了。)


  29. Oracle不是開源軟件,所以你沒法在上面進行修補/優化/修復/實現你本身的東西。


  Robert Hodges


  30. Oracle的查詢優化是一件須要專家介入的工做。它的優化器比MySQL的要成熟的多,這意味着查詢計劃也相應的更加難以解釋。若是你有一個大的應用,請準備好聘用一位瞭解如何有效進行此項工做的夥計


  31. Oracle的基於成本的優化器的有效運行須要精確的統計信息。對於發生變化的表,須要按期的爲其收集統計信息。批量數據加載進程也須要在處理過程當中不時的執行估算/計算統計命令來收集統計信息以取得滿意的性能


  32.在Oracle中,建立鏈接是個代價高昂的操做。性能良好的Oracle應用都傾向於使用鏈接池來最小化登錄的開銷。


  33. Oracle應用須要應用準備好的聲明以獲取可觀的性能。若是你的應用不使用prepared statement的話,須要對應用進行調整。這是應用Oracle數據庫的標準編程實踐。(此處的預備聲明應該更多的是指使用綁定變量)。


  34.應用須要關閉結果集遊標,不然很快就會遇到着名的「ORA-01000太多打開遊標」錯誤。在Oracle中,這被認爲是一個用戶錯誤,須要你去調整你的代碼。


  35.繁忙系統上的長查詢可能會遇到「ORA-01555快照太舊」錯誤。能夠經過調整redo段的大小(有時經過調整應用)來消除此錯誤,可是仍是須要你關注這一點。處的重作段的表述是有點問題,此處應該是撤消表空間以及對應的撤消
保留,Oracle沒有所謂的重作段的說法)。


  36. Oracle沒有相似於非事務表的概念。大部分Oracle用戶都承認這一點。


  37. Oracle的臨時表定義是持久的SQL對象,而且對全部用戶均可見(此處應該理解成以此用戶登錄的會話,Session)。這一點與MySQL中使用的輕量級表有區別,在MySQL的中,臨時表是在單個會話內建立並銷燬的


  Denish Patel


  38.在Oracle中,多個Alter Table操做不能在同一個SQL語句中執行,例如alter table emp modify name varchar(64)not null,add gender char(1)not null;


  39.默認狀況下,Oracle不會自動提交。


  40. KILL命令在Oracle中無效,它使用alter system kill命令。(不清楚第一個kill是什麼概念,操做系統級別的kill,Oracle仍是支持的,我常用)。


  41. Oracle在語句中不支持使用減號( - )。(不清楚這個具體的減號是什麼東西)。


  42. Oracle的sqlplus命令行接口不支持高亮顯示。


  羅蘭布曼


  43. Oracle不支持group_concat或者相似的分組函數。須要你經過循環調取遊標來實現,或者經過組合XMLAGG與XMLQUERY來實現你須要的查詢。(在Oracle 9R2以後,可使用自定義聚合函數來實現這個功能,到Oracle 11gR1以後,Oracle本身還提供了一個新的listagg分組函數來實現這個功能)。


  44.對於count(distinct expression)函數,Oracle只支持一個表達式(要麼一個列名,要麼*),而Mysql支持一組表達式。(在甲骨文中要實現一組表達式,能夠經過使用子查詢來實現)。


  45. Oracle對子查詢的支持很是好。不要由於Mysql中的習慣而不去使用它。


  46. Oracle不支持用戶變量(@num)。若是你須要利用它來計算運行時總和,能夠利用分析函數(窗口函數)來實現。若是用戶戶變量來實現特定的彙總函數功能,你將發現Oracle已經有內置得功能支持這些功能。(另外在甲骨文中,能夠經過在封裝中應用DBMS_SESSION來設置上下文以實現用戶變量)。


  47. Oracle沒有區分TIME與DATE類型,Oracle的日期類型實際上就是一個DATETIME類型(可是比MySQL支持一個更大的日期範圍)。


  48.相對於MySQL來說,Oracle的存儲過程與觸發器功能與性能都要好不少。不要習慣性地不去使用它們。


  49.若是須要在Oracle中編寫存儲過程,記得在開始編碼前花點時間瞭解下。你將發現大部分問題已經解決掉了,或者至少大量的基礎代碼已經在那兒了。


  50若是你在MySQL中有使用BLOB類型或者TEXT類型,你可能會將他們遷移到Oracle地圖BLOB與CLOB中。然而,與MySQL不一樣,Oracle並非透明地實體化這些數據。在大部分狀況下,這確實是件好事情,可是它也意味着若是你只是想把BLOB / CLOB看成文本處理,你將須要花費大量瑣碎的時間來使用LOB函數,在使用之初,LOB函數仍是蠻讓人氣餒的(LOB相關函數確實挺煩人,LOB的處理效率也很是差,即便是使用Oracle
11g的SecureFile)。

相關文章
相關標籤/搜索