SQLserver-MySQL的區別和用法

 

 

對於程序開發人員而言,目前使用最流行的兩種後台數據庫即為MySQL and SQL Server。這兩者最基本的相似之處在於數據存儲和屬於查詢系統。你可以使用SQL來訪問這兩種數據庫的數據,因為它們都支持ANSI-SQL。還有,這兩種數據庫系統都支持二進制關鍵詞和關鍵索引,這就大大地加快了查詢速度。同時,二者也都提供支持XML的各種格式。除了在顯而易見的軟件價格上的區別之外,這兩個產品還有什麼明顯的區別嗎?在這二者之間你是如何選擇的?讓我們看看這兩個產品的主要的不同之處,包括發行費用,性能以及它們的安全性。

一,原則

二者所遵循的基本原則是它們的主要區別:開放vs保守。SQL服務器的狹隘的,保守的存儲引擎與MySQL服務器的可擴展,開放的存儲引擎絕然不同。雖然你可以使用SQL服務器的Sybase引擎,但MySQL能夠提供更多種的選擇,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的關鍵詞,所以它比SQL服務器要少一些相關的數據庫。同時,MySQL也缺乏一些存儲程序的功能,比如MyISAM引擎聯支持交換功能。 
純粹就性能而言,MySQL是相當出色的,因為它包含一個缺省桌面格式MyISAM。MyISAM 數據庫與磁盤非常地兼容而不佔用過多的CPU和內存。MySQL可以運行於Windows系統而不會發生衝突,在UNIX或類似UNIX系統上運行則更好。你還可以通過使用64位處理器來獲取額外的一些性能。因為MySQL在內部里很多時候都使用64位的整數處理。Yahoo!商業網站就使用MySQL 作為後台數據庫。 
當提及軟件的性能,SQL服務器的穩定性要比它的競爭對手強很多。但是,這些特性也要付出代價的。比如,必須增加額外複雜操作,磁盤存儲,內存損耗等等。如果你的硬件和軟件不能充分支持SQL服務器,我建議你最好選擇其他如DBMS數據庫,因為這樣你會得到更好的結果。

二,安全功能

MySQL有一個用於改變數據的二進制日誌。因為它是二進制,這一日誌能夠快速地從主機上複製數據到客戶機上。即使服務器崩潰,這一二進制日誌也會保持完整,而且複製的部分也不會受到損壞。

在SQL服務器中,你也可以記錄SQL的有關查詢,但這需要付出很高的代價。

(1)安全性

這兩個產品都有自己完整的安全機制。只要你遵循這些安全機制,一般程序都不會出現什麼問題。這兩者都使用缺省的IP端口,但是有時候很不幸,這些IP也會被一些黑客闖入。當然,你也可以自己設置這些IP端口。

(2)恢復性:先進的SQL服務器

恢復性也是MySQL的一個特點,這主要表現在MyISAM配置中。這種方式有它固有的缺欠,如果你不慎損壞數據庫,結果可能會導致所有的數據丟失。然而,對於SQL服務器而言就表現得很穩鍵。SQL服務器能夠時刻監測數據交換點並能夠把數據庫損壞的過程保存下來。

根據需要決定你的選擇

對於這兩種數據庫,如果非要讓我說出到底哪一種更加出色,也許我會讓你失望。以我的觀點,任一對你的工作有幫助的數據庫都是很好的數據庫,沒有哪一個數據庫是絕對的出色,也沒有哪一個數據庫是絕對的差勁。我想要告訴你的是你應該多從你自己的需要出發,即你要完成什麼樣的任務?而不要單純地從軟件的功能出發。

如果你想建立一個.NET服務器體系,這一體系可以從多個不同平台訪問數據,參與數據庫的管理,那麼你可以選用SQL服務器。如果你想建立一個第三方站點,這一站點可以從一些客戶端讀取數據,那麼MySQL將是最好的選擇。

這兩者數據庫都能夠在.NET或J2EE下運行正常,同樣,都能夠利用RAID。

   (1),優點分析:MYSQL短小精悍,容易上手,操作簡單,免費供用的。相對其它數據庫有特色又實用的語法多一些。SQL怎麼也算是大型數據庫,穩定,能做一般大系統的數據倉庫,運行速度明顯比MYSQL快N多(海量數據下這個優勢顯而易見)。

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

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

 三,MySQL

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

日誌管理系統:高效的插入和查詢功能,如果設計地較好,在使用MyISAM存儲引擎的時候,兩者可以做到互不鎖定,達到很高的並發性能。

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

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

1優缺點

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

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

2.基本語法

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

四:SQLserver

 

1.優缺點

 

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

 

2.基本語法

 

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

 

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

 

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

 

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

 

 

 

MySQL(用法):

SQLserver(分頁) :

–分頁顯示 查詢
— 分頁存儲過程
— 每頁大小、當前頁、搜索的條件(模糊查詢)、總記錄數、總頁數
— @pagesize 每頁大小,@pageindex 當前頁 out,
— @pageName 搜索的條件,@pagecount 總記錄數 ,@totalpage 總頁數
==!(表名是寫死的)
 
 
go
create proc [orderinfo](@pagesize int,@pageindex int out,@pageName nvarchar(50),@pagecount int out,@totalpage int out)
as
begin 
      -- 糾正當前頁 < 1 的問題
	  if @pageindex < 1
	     set @pageindex = 1

	  --求出總記錄數,算出總頁數
	  select @pagecount = count(*) from Student where StuName like  '%'+@pageName+'%'
	  -- 算出總頁數-- (方法一)	    
		  -- if @pagecount % @pagesize = 0
		  --    set @totalpage = @pagecount / @pagesize
		  -- else 
		  --    set @totalpage = @pagecount / @pagesize + 1

      -- (方法二)向上取整
	  set @totalpage = CEILING (@pagecount * 1.0 / @pagesize)

	  -- 糾正當前頁  > 總頁數的問題
	  if @pageindex > @totalpage
	     set @pageindex = @totalpage
	  -- 分頁查詢出所有數據
	  select * from 
	  (select a.Id,a.StuName,a.BirthDay,a.Age,a.Status,a.ClassId,b.ClassName,ROW_NUMBER() over (order by StuName)rn 
	  from Student a join Class b on a.ClassId=b.ClassId
	  where StuName  like  '%'+@pageName+'%')t1
	  where rn between (@pageindex - 1) * @pagesize + 1 and @pageindex * @pagesize 
end
go
declare @pageindex int, @totalpage int
exec [orderinfo] 4,2,'',@pageindex out,@totalpage out
select @pageindex , @totalpage