SQL Server數(shù)據(jù)庫程序設(shè)計(jì)知識(shí)總結(jié)
SQL Server是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,并于1988年推出了第一個(gè)OS/2版本。它只是眾多關(guān)系數(shù)據(jù)庫管理系統(tǒng)的一種,其它的關(guān)系數(shù)據(jù)庫管理系統(tǒng)還有Server,Oracle,DB/2,Sybase,Informix;關(guān)系數(shù)據(jù)庫:Access,F(xiàn)oxPro,Dbase等。如今,數(shù)據(jù)庫已經(jīng)變成學(xué)習(xí)軟件開發(fā)的核心課程之一,幾乎絕大部分軟件都涉及到數(shù)據(jù)庫,很多數(shù)據(jù)必須存在數(shù)據(jù)庫中。所以為了更好的掌握和操作數(shù)據(jù)庫,對(duì)數(shù)據(jù)庫知識(shí)的封裝就顯得尤為重要。
● 關(guān)系和非關(guān)系數(shù)據(jù)庫
關(guān)系數(shù)據(jù)庫是創(chuàng)建在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,由一個(gè)或多個(gè)二維關(guān)系數(shù)據(jù)表組成,通過建立表之間的關(guān)系來定義數(shù)據(jù)庫的結(jié)構(gòu)。在關(guān)系數(shù)據(jù)庫中最重要的是數(shù)據(jù) 表,數(shù)據(jù)表把相關(guān)聯(lián)的數(shù)據(jù)按行和列排列到一起來描述一個(gè)實(shí)物。一個(gè)二維表稱為一個(gè)關(guān)系,每一個(gè)關(guān)系又可以包含多個(gè)屬性。
和關(guān)系型數(shù)據(jù)庫相比,非關(guān)系型數(shù)據(jù)庫特別適合以SNS為代表web 2.0應(yīng)用,這些應(yīng)用需要極高速的并發(fā)讀寫操作,而對(duì)數(shù)值一致性要求卻不甚高。關(guān)系數(shù)據(jù)庫為了維護(hù)事務(wù)的一致性付出了重大代價(jià)導(dǎo)致了其讀寫能力下降,隨著 現(xiàn)在網(wǎng)絡(luò)SNS的應(yīng)用對(duì)并發(fā)讀寫能力要求極高,關(guān)系型數(shù)據(jù)庫已經(jīng)無法應(yīng)付,因此,必須用新的一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)來來代替關(guān)系數(shù)據(jù)庫。關(guān)系數(shù)據(jù)庫的另一個(gè)特 點(diǎn)就是其具有固定的表結(jié)構(gòu),因此,其擴(kuò)展性極差,而在SNS中,系統(tǒng)的升級(jí),功能的增加,往往意味著數(shù)據(jù)結(jié)構(gòu)巨大改動(dòng),這一點(diǎn)關(guān)系型數(shù)據(jù)庫也難以應(yīng)付,需 要新的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。于是,非關(guān)系數(shù)據(jù)庫(NoSQL)應(yīng)運(yùn)而生。非關(guān)系數(shù)據(jù)庫通常沒有固定的表結(jié)構(gòu),嚴(yán)格上說不是一種數(shù)據(jù)庫,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存 儲(chǔ)方法的集合。
● SQL Server數(shù)據(jù)庫基礎(chǔ)
首先我們從圖中看他們之間的聯(lián)系。
一、T-SQL和SQL的比較
SQL全稱為Structured Query Language,是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,它主要包括三種語言: 數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言、數(shù)據(jù)控制語言。T-SQL是SQL語言的增強(qiáng)版。
也就是說,SQL三種語言適用于所有關(guān)系型數(shù)據(jù)庫,但是它本身具有局限性,因?yàn)樗惶峁┝藢?duì)數(shù)據(jù)庫數(shù)據(jù)基本的增刪改查等命令,在開發(fā)擁有復(fù)雜結(jié)構(gòu)的數(shù)據(jù) 庫程序時(shí),只有SQL語言是遠(yuǎn)遠(yuǎn)不夠的,于是各大公司在SQL基礎(chǔ)上對(duì)它進(jìn)行了增強(qiáng)。T-SQL是MS和Sybase在 SQL的DDL和 DML基礎(chǔ)上,增加了延伸的函數(shù)、系統(tǒng)預(yù)存程序以及程式設(shè)計(jì)結(jié)構(gòu)(例如 IF和 WHILE)讓程式設(shè)計(jì)更有彈性。和T-SQL類似的增強(qiáng)版的SQL語言還有Oracle對(duì)SQL的擴(kuò)展PL/SQL。
二、數(shù)據(jù)庫對(duì)象
數(shù)據(jù)庫對(duì)象定義了數(shù)據(jù)庫內(nèi)容的結(jié)構(gòu)。它們包含在數(shù)據(jù)庫項(xiàng)目中,數(shù)據(jù)庫項(xiàng)目還可以包含數(shù)據(jù)生成計(jì)劃和腳本。 在學(xué)習(xí)SQL Server時(shí),最快的方法是先學(xué)習(xí)數(shù)據(jù)庫對(duì)象。在研究了它們之間的異同點(diǎn)后,我把數(shù)據(jù)庫對(duì)象分為三類。
1、基于表的對(duì)象
表,數(shù)據(jù)保存在表中。
基于表的對(duì)象我把它分為三類:
視圖,用來篩選出用戶想要的信息,它是虛擬表,只封裝語句,一定程度上保證表中數(shù)據(jù)的安全;
索引,對(duì)數(shù)據(jù)庫表中一個(gè)或多個(gè)列的值進(jìn)行排序的結(jié)構(gòu),提供指針以指向存儲(chǔ)在表中指定列的數(shù)據(jù)值,然后根據(jù)指定的排序次序排列這些指針。數(shù)據(jù)庫使用索引的方式與使用書的目錄很相似;
約束、默認(rèn)值、規(guī)則、觸發(fā)器確保了數(shù)據(jù)完整性。
2、數(shù)據(jù)庫安全性:用戶、角色、權(quán)限與數(shù)據(jù)庫安全性中的登陸聯(lián)合應(yīng)用可以限制登陸者可進(jìn)行的操作來保證數(shù)據(jù)庫的安全性。
3、塊:存儲(chǔ)過程和函數(shù)有點(diǎn)相似,但是存儲(chǔ)過程可以返回Recordset;觸發(fā)器是一種特殊的存儲(chǔ)過程。
三、DTS數(shù)據(jù)轉(zhuǎn)換服務(wù)
DTS的主要作用:1、導(dǎo)入與導(dǎo)出數(shù)據(jù)
2、轉(zhuǎn)換數(shù)據(jù)(檢驗(yàn)、凈化、重整數(shù)據(jù))
3、轉(zhuǎn)換數(shù)據(jù)庫對(duì)象
四、管理和維護(hù)
在這部分中主要是對(duì)數(shù)據(jù)庫文件的保護(hù)和管理。
1、數(shù)據(jù)庫文件
數(shù)據(jù)庫文件是存放數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)庫對(duì)象的文件。一個(gè)數(shù)據(jù)庫可以有一個(gè)或多個(gè)數(shù)據(jù)庫文件,一個(gè)數(shù)據(jù)庫文件只屬于一個(gè) 數(shù)據(jù)庫。當(dāng)有多個(gè)數(shù)據(jù)庫文件時(shí),有一個(gè)文件被定義為主數(shù)據(jù)庫文件,擴(kuò)展名為.mdf,它用來存儲(chǔ)數(shù)據(jù)庫的啟動(dòng)信息和部分或全部數(shù)據(jù)。一個(gè)數(shù)據(jù)庫只能有一個(gè) 主數(shù)據(jù)庫文件,其它數(shù)據(jù)庫文件被稱為次要數(shù)據(jù)庫文件,擴(kuò)展名為.ndf,用來存儲(chǔ)主文件沒存儲(chǔ)的其它數(shù)據(jù)。
多個(gè)數(shù)據(jù)庫文件組合到一塊就成為文件組。主文件組是由主文件組合成,此文件組是由此文件組合成,但是事務(wù)日志文件不屬于任何一個(gè)文件組。
2、事務(wù)和鎖
事務(wù)
事務(wù)(Transaction)是并發(fā)控制的單位,是用戶定義的一個(gè)操作序列。這些操作要么都做,要么都不做,是一個(gè)不可分割的工作單位。通過事務(wù),SQL Server能將邏輯相關(guān)的一組操作綁定在一起,以便服務(wù)器保持?jǐn)?shù)據(jù)的完整性。
事務(wù)通常是以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結(jié)束。
COMMIT表示提交,即提交事務(wù)的所有操作。具體地說就是將事務(wù)中所有對(duì)數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中去,事務(wù)正常結(jié)束。
ROLLBACK表示回滾,即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)進(jìn)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫的所有以完成的操作全部撤消,回滾到事務(wù)開始的狀態(tài)。
鎖
數(shù)據(jù)庫就是通過鎖機(jī)制來解決并發(fā)問題的。。主要就是兩種鎖,共享鎖和排他鎖(也叫獨(dú)占鎖)。
從程序員的角度看鎖分為以下兩種類型:
樂觀鎖(Optimistic Lock):樂觀鎖假定在處理數(shù)據(jù)時(shí),不需要在應(yīng)用程序的代碼中做任何事情就可以直接在記錄上加鎖、即完全依靠數(shù)據(jù)庫來管理鎖的工作。一般情況下,當(dāng)執(zhí)行事務(wù)處理時(shí)SQL Server會(huì)自動(dòng)對(duì)事務(wù)處理范圍內(nèi)更新到的表做鎖定。
悲觀鎖(Pessimistic Lock):悲觀鎖對(duì)數(shù)據(jù)庫系統(tǒng)的自動(dòng)管理不感冒,需要程序員直接管理數(shù)據(jù)或?qū)ο笊系募渔i處理,并負(fù)責(zé)獲取、共享和放棄正在使用的數(shù)據(jù)上的任何鎖。
● 應(yīng)用實(shí)例
/*--下面我們新建一個(gè)名為company的數(shù)據(jù)庫,創(chuàng)建三個(gè)表priduct、project、tblsales,并在其中創(chuàng)建默認(rèn)值、規(guī)則、觸發(fā)器、存儲(chǔ)過程,并利用用戶、角色、權(quán)限等確保數(shù)據(jù)庫安全。*/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[getavgpbiaodi]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pinfo5000]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[pro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sysconstraints]') and OBJECTPROPERTY(id, N'IsView') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[priduct]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[project]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblsales]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) if exists (select * from dbo.systypes where name = N'tele') if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rule_position]') and OBJECTPROPERTY(id, N'IsRule') = 1) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[@position]') and OBJECTPROPERTY(id, N'IsDefault') = 1) create default [@position] as '其它' EXEC sp_addtype N'tele', N'smallint', N'not null' setuser CREATE TABLE [dbo].[priduct] ( CREATE TABLE [dbo].[project] ( CREATE TABLE [dbo].[tblsales] ( setuser EXEC sp_bindefault N'[dbo].[@position]', N'[project].[項(xiàng)目標(biāo)的]' EXEC sp_bindrule N'[dbo].[rule_position]', N'[project].[項(xiàng)目名稱]' setuser SET QUOTED_IDENTIFIER ON --/****** Encrypted object is not transferable, and script can not be generated. ******/ GO SET QUOTED_IDENTIFIER ON create procedure getavgpbiaodi GO SET QUOTED_IDENTIFIER ON create procedure pinfo5000 GO SET QUOTED_IDENTIFIER ON create procedure pro GO |
SQL Server的基礎(chǔ)框架知識(shí),我現(xiàn)在只能總結(jié)這么多,更多的總結(jié)還是在以后一點(diǎn)一滴的學(xué)習(xí)中。
posted on 2012-09-03 10:12 順其自然EVO 閱讀(279) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫