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