1. 程式人生 > 實用技巧 >SQLserver-MySQL的區別和用法

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(用法):

一,基本概念
1, 常用的兩種引擎:
(1) InnoDB
a,支援ACID,簡單地說就是支援事務完整性、一致性;
b,支援行鎖,以及類似ORACLE的一致性讀,多使用者併發;
c,獨有的聚集索引主鍵設計方式,可大幅提升併發讀寫效能;
d,支援外來鍵;
e,支援崩潰資料自修復;
InnoDB設計目標是處理大容量資料庫系統,它的CPU利用率是其它基於磁碟的關係資料庫引擎所不能比的。
它是一個可靠地事務處理引擎,不支援全文字搜尋

(2) MyISAM
a,不支援 每次查詢具有原子性
b,只支援表所
c,強調的是效能,其執行數 度比InnoDB型別更快,但是不提供事務支援
d,如果執行大量的SELECT,MyISAM是更好的選擇

2, 介紹:
a,資料庫-database
儲存有組織的資料的容器(通常是一個檔案或一組檔案)

b,表-table
某種特定型別資料的結構化清單

c,模式-schema
關於資料庫和表的佈局及特性的資訊

d,列-column
表中的一個欄位,所有表都是由一個或多個列組成的

e,行-row

表中的一個記錄

f,資料型別-datatype
所容許的資料的型別。每個表列都有相應的資料型別,它限制(或容許)該列中儲存的資料

二,mysql命令列

1,連線mysql
格式: mysql -h主機地址 -u使用者名稱 -p使用者密碼

a, 連線到本地MYSQL
首先開啟DOS視窗,然後進入目錄mysql\bin,再鍵入命令mysql -u root -p,
回車後提示你輸密碼。 MYSQL的提示符是: mysql> 。(預設root使用者沒有密碼)

b,連線到遠端主機上的MYSQL
假設遠端主機的IP為:218.105.110.116,使用者名稱為root,密碼為abcd123456。
則鍵入以下命令:mysql -h218.105.110.116 -u root -p abcd123456;(注:u與root之間可以不用加空格,其它也一樣)。

2, 啟動mysql服務
net start mysql

3,停止mysql服務
net stop mysql

4,查詢埠是否衝突

netstat –na | findstr 8080 檢視被監聽的埠 , findstr用於查詢後面的埠是否存在。

5,退出mysql
quit或者exit退出

6,修改密碼:
格式:mysqladmin -u使用者名稱 -p舊密碼 password 新密碼
例如給root修改密碼:
mysqladmin -u root -p ab12 password djg345

三,顯示命令
1.顯示當前資料庫伺服器中的資料庫列表
mysql> SHOW DATABASES;

2.顯示某個資料庫中的資料表

mysql> USE 庫名;//使用某個庫
mysql> SHOW TABLES;//列出庫中所有的表

3.顯示資料表的結構
mysql> DESCRIBE 表名;

4.建立資料庫
mysql> CREATE DATABASE 庫名;。

5.建立資料表
mysql> USE 庫名。
mysql> CREATE TABLE 表名 (欄位名 VARCHAR(20), 欄位名 CHAR(1));。

6.刪除資料庫
mysql> DROP DATABASE 庫名;。

7.刪除資料表
mysql> DROP TABLE 表名;。

8.將表中記錄清空
mysql> DELETE FROM 表名;。

9.顯示錶中的記錄
mysql> SELECT * FROM 表名;。

10.往表中插入記錄
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);。

11.更新表中資料
mysql-> UPDATE 表名 SET 欄位名1=’a',欄位名2=’b’ WHERE 欄位名3=’c';。

12.用文字方式將資料裝入資料表中
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;。

13.匯入.sql檔案命令
mysql> USE 資料庫名;。
mysql> SOURCE d:/mysql.sql;。

14.命令列修改root密碼
mysql> UPDATE mysql.user SET password=PASSWORD(’新密碼’) WHERE User=’root’;。
mysql> FLUSH PRIVILEGES;。

15.顯示use的資料庫名
mysql> SELECT DATABASE();。

16.顯示當前的user
mysql> SELECT USER();。

一、索引的建立

二、檢視的建立

三、新增資料的儲存過程

四、修改資料的儲存過程

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 '%'[email protected]+'%'
-- 算出總頁數-- (方法一)
-- 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 '%'[email protected]+'%')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