1. 程式人生 > >SQL Server和MySQL數據庫

SQL Server和MySQL數據庫

人才 mysql命令行 sel llb 增加 null 位數 算法 命令行

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


一、SQL Server基本簡介

1.1,概述

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

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) 負載均衡器(控制端)故障,會導致整個數據庫系統癱瘓。

1.4,基本語法

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

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

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

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


二、MySQL基本簡介

2.1,概述

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

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基本相同。

三、聯系和區別

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

區別:最大的區別就是,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)。

SQL Server和MySQL數據庫