sql server程序員教學筆記_第1頁
sql server程序員教學筆記_第2頁
sql server程序員教學筆記_第3頁
sql server程序員教學筆記_第4頁
sql server程序員教學筆記_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

sqlserver的教學筆記

sql應用的環(huán)境

了解現(xiàn)在流行的兩種編程模式

c/s:兩層結(jié)構(gòu)

當前c/s的模式的運作過程:

客戶機-------服務器

1:服務器負責數(shù)據(jù)管理及程序處理

2:客戶機負責界面描述和顯示.

3:客戶機向服務器發(fā)出數(shù)據(jù)處理請求

4:服務器響應后將處理之后的結(jié)果返回給客戶機.

2:b/s:三層結(jié)構(gòu)[客戶機,internet瀏覽器,數(shù)據(jù)庫服務器]

sqlserver:結(jié)構(gòu)化查詢語言服務器

它是一個只能識別sql語句,為客戶端應用程序提供數(shù)據(jù)服務的一個數(shù)據(jù)庫服務器.(網(wǎng)絡(luò)數(shù)

據(jù)庫)

sqlserver它可以用于c/sb/s:在于客戶端所使用的編程語言來決定.

總結(jié):sql的角色

1:作為一客戶端應用程序提供數(shù)據(jù)服務的一個數(shù)據(jù)庫服務器[由客戶端應用程序通常是編

程語言如:

vb,delphi,asp和sqlserver服務器組成]

2:作為一強大的數(shù)據(jù)庫管理系統(tǒng)[由客戶端的sqlserver與服務器的sqlserver組成]

sqlserver的體系結(jié)構(gòu):

1:客戶端組件.2:服務端組件[服務].3:通信組件.

A:sqlserver的服務器端組件:

1:sqlserver服務:

作用:

1):數(shù)據(jù)庫管理系統(tǒng)的核心,它在數(shù)據(jù)庫管理系統(tǒng)中的地位就像發(fā)動機在氣車上的地位-

樣重要

2):在windowsnt操作系統(tǒng)中是以"服務"的形式存在的(mssqlserver)

3):功能是負責協(xié)調(diào)或安排客戶機向服務器提出的請求,然后一個一個解釋并執(zhí)行這些

sql命令.并向

客戶要返回執(zhí)行的結(jié)果.

2:sqlserveragent:sql代理服務[自動管理,]

1):依然是以服務的形式存在的.

3:msdtc:分布式事務服務:

用來支持分布式事務

4:micrsoftsearch:全文搜索和查詢服務:

可以為sqlserver提供功能更強的查詢,為了加快查詢速度.

sql的客戶端組件:

A:企業(yè)管理器:

作用:是圖形的形式實現(xiàn)sql服務器的有效配置和管理,[與windows資源管理器相以].

比如:建表,建數(shù)據(jù)庫,建立用用戶登錄,總之:sql的大部分工作都是在這里完成的.

B:查詢分析器:用于調(diào)試sql程序(語句),是編寫sql代碼開發(fā)工具

C:sqlserver事件探查器:

作用:用于監(jiān)視和分析sqlserver的服務器的活動情況.比如:服務器出現(xiàn)性能問題時,

我們要首先查看事件探查器

D:sqlserver客戶端的網(wǎng)絡(luò)實用工具

作用:提供客戶端的網(wǎng)絡(luò)連接配置的一種途徑.

E:sqlservere服務器端網(wǎng)絡(luò)實用工具:

提供服務器端的網(wǎng)絡(luò)連接配置,以確保服務器能正常地接受來自客戶端的訪問

簡單講解怎樣配置:

A:當服務器與客戶端位于同一臺電腦中時,可以使用:命令管道(namepile),共享內(nèi)存

B:不同的電腦中,tcp/ip,命令管道(namepile)

同一臺電腦:sc

1:s:命名管道c:命名管道

2:c:使用共享內(nèi)存,而s無限制

3:s:tcp/ipc:tcp/ip[不行]

4:s:tcp/ipc:命名管道[不行]

5:s:命名管道c:tcp/ip[行]

不同的電腦:

1:s:命名管道c:命名管道

2:s:tcp/ipc:tcp/ip[一定注意要保證兩者的端口號要一致]1433

服務管理器:

圖形化的,用于啟動或暫停,停止sqlserver服務的應用程序.

通過windowsnt服務來執(zhí)行

sql管理向?qū)В?/p>

利用管理向?qū)?,使用戶更加容易的完成一系列的操?

比如:

關(guān)系數(shù)據(jù)庫的基礎(chǔ)知識.

1:數(shù)據(jù)庫:數(shù)據(jù)庫是存儲在計算機設(shè)備上的結(jié)構(gòu)化的相關(guān)數(shù)據(jù)的集合.

A:數(shù)據(jù)庫只是用來存儲數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系的,并不用來存儲數(shù)據(jù)的.

B:所有數(shù)據(jù)都是存儲在表里面的.

c:數(shù)據(jù)庫只是用來組織或管理表.

2:實體:客觀存在可以相互區(qū)別的事物.

3:屬性:描述實體特征的[表中的每一列被稱為一個屬性,或者字段]

4:元組(記錄):表中每一行被一個元組,或者?條記錄

5:實體之間關(guān)系.

1:一對一:

2:一對多:

3:多對多:

組成數(shù)據(jù)庫的對像

A:表:具體組織和存儲數(shù)據(jù)的對像,由列和行組成.[table]

1:行和列順序可以是任意的.在同一個表中列名必須是唯一的.

2:在同一個數(shù)據(jù)庫里面表名也必須要是唯一.

b:主鍵:(primarykey)

1:表中一列或多列的組合,其值唯一確定表的一行.

2:主鍵不能重復

3:作為主鍵各列都不能為空.

c:外鍵:(foreignkey):表中一列或多列的組合,它本身不是本表的主鍵,而是另外-一個

表的主鍵.[一對多關(guān)系]外鍵是兩個表發(fā)生關(guān)系一個紐帶.

d:視圖(view):從一個或幾個基本表中根據(jù)用戶需要而做成一個虛表.

1:視圖是虛表,它在存儲時只存儲視圖的定義,而沒有存儲對應的數(shù)據(jù)

2:視圖只在剛剛打開的?瞬間,通過定義從表中搜集數(shù)據(jù),并展現(xiàn)給用戶

e:約束(constraint):

對表中各列的取值范圍進行限制,以確保表中數(shù)據(jù)的合理有效.

f:默認值:(default)

在向表中插入數(shù)據(jù)時,為沒有指定數(shù)據(jù)的列提供個默認的數(shù)據(jù)

g:事務(constran):

1:在關(guān)系型數(shù)據(jù)庫里面一般使用"事務”來處理用戶提交的修改表和數(shù)據(jù)的操作

2:事務就是詼性完成的一組數(shù)據(jù)的操作.

3:事務的持征:位于事務中的操作要么全部都做,要么全部取消,從而維護了數(shù)據(jù)庫中

數(shù)據(jù)的合理性.

4:關(guān)系數(shù)據(jù)庫中一般按照先寫日志的方法進行事務操作.即:在實施事務之前先將要

進行操作的記錄寫入日志,再進行實際的數(shù)據(jù)修改.

5:是記錄關(guān)系數(shù)據(jù)修改的情況的筆記.

6:在用戶對數(shù)據(jù)庫實施之前,sql會把兩種形式的情況寫入日志.

1:實施事務之間的數(shù)據(jù)狀態(tài).

2:實施事務之后的數(shù)據(jù)狀態(tài).

當事務由于中途被破壞時,sqlserver會利用日志記錄把數(shù)據(jù)恢復成實施事務之前的

數(shù)據(jù)狀態(tài).即撤消事務(回滾),如果事務順利的執(zhí)行則把數(shù)據(jù)恢復成實施事務之后的狀態(tài)

被稱為(前滾)

h:規(guī)則(rule):同約束一樣,對特定的列進行限制:

單價*數(shù)量=總額

i:索引:(index)提供一種無需掃描整張表就能實現(xiàn)對數(shù)據(jù)快速訪問的途徑.可以使用

索引來優(yōu)化查詢.[用索引可以實現(xiàn)排序]

i:存儲過程(storeprocedure):

一組經(jīng)過編譯好的可以重復使用的sql代碼.存儲過程是在服務器中執(zhí)行,用戶可以

調(diào)用存儲過程并接收存儲過程返回的結(jié)果.

1:由于存儲過程是存儲在服務器,所有可以讓每一個客戶重復使用,減少書寫sql代碼

書寫量.

2:由于存儲過程是事先編譯好的sql代代碼,所以在執(zhí)行時,并不做語法檢驗,可以大大提

高sql語句的執(zhí)行效率.

j:觸發(fā)器(trigger):

一種特殊的存儲過程.

1:觸發(fā)器與表相關(guān).

2:當用戶對指定的表進行某種操作時,觸發(fā)器會自動執(zhí)行,去做它里面sql代碼

k:數(shù)據(jù)類型(datatype)

兩種類型:系統(tǒng)數(shù)據(jù)類型,用戶自定義數(shù)據(jù)類型.

系統(tǒng)數(shù)據(jù)類型:int,float,char,vchar,text[備注,工作簡歷],image[存儲圖像]

1:日志(log):

sqlserver使用日志記載用戶對數(shù)據(jù)庫進行的一系列的操作.日志是維護數(shù)據(jù)庫完整性的

重要工具.sqlserver遵守先寫日志再對數(shù)據(jù)庫進行操作.所以某一天,如果數(shù)據(jù)庫損壞,但可

以通過日志進行恢復.

第四章sql系統(tǒng)組成

1:sqlserver系統(tǒng)數(shù)據(jù)庫.

A:master:最重要的一個數(shù)據(jù)庫.保存了:

服務器的用戶名密碼.

服務器的配置信息

使用的數(shù)據(jù)類型

錯誤信息

系統(tǒng)或者用戶建立的所有對像

說明:山于master數(shù)據(jù)庫比較重要所以不要在里面建表,不要修改里面的任何內(nèi)容.否則會

使

sqlserver

B:tempdb:臨時數(shù)據(jù)庫

1:記錄所有的臨時表格或者數(shù)據(jù).

2:tempdb是一個全局資源,任何連接到到sqlserver都可以使用.

3:該數(shù)據(jù)庫所放有的數(shù)據(jù)全部是臨時,這就是說當sqlserver服務停止之后,所有數(shù)據(jù)將

會消失

C:model數(shù)據(jù)庫:模型數(shù)據(jù)庫.

1:是建立新的數(shù)據(jù)庫一個樣式.

2:當用戶建立一個數(shù)據(jù)庫的時候,首先要從model數(shù)據(jù)庫里面復制所有的表.

d:msdb數(shù)據(jù)庫:

主要被sqlserveragent服務用于操作作業(yè)調(diào)度以及管理報警.

供用戶練習用的.

A:pubs:描述一個圖書出版公司建立的數(shù)據(jù)庫的模型.

B:northwind:描述一貿(mào)易公司數(shù)據(jù)庫模型,一個northwind專門經(jīng)營世界各地風味食品.

customersorder

2:系統(tǒng)表

A:服務器級系統(tǒng)表:[master數(shù)據(jù)庫里面]

1:sysdatabases:記錄所有的數(shù)據(jù)庫的相關(guān)信息

2:sysmessages:記錄了系統(tǒng)錯誤和警告信息

3:syslangues:記錄了服務器能夠識別的語言

4:sysconfigures:記錄了服務器配置情況.

5:systype:記錄了服務器所有數(shù)據(jù)類型.

B:數(shù)據(jù)庫級系統(tǒng)表:[保存在不同的數(shù)據(jù)庫里面]

A:sysbojects:所有數(shù)據(jù)庫的對像的相關(guān)資料.[類型:u:表,V:視圖,P:存儲過程

tr觸發(fā)器

B:sysusers:所有數(shù)據(jù)庫的用戶的信息.

c:syscolumns:所有數(shù)據(jù)庫表中的列.

3:系統(tǒng)的存儲過程:

1:sphelp表名:查看表的信息:

2:sp_renamedb舊名字,新名字:把數(shù)據(jù)庫更名.

4:示列數(shù)據(jù)庫:

pbs,northwind.

第五章sqlserver服務器的管理與使用

1:管理服務器組:

A:新建一個空組:

B:改名,刪除一個組:

2:sqlserver服務器的連接和注冊:

A:配置服務器端和客、戶端的網(wǎng)絡(luò)庫:

1:為會么要配置:

2:進行配置:

1:啟用協(xié)議:服務器與客戶端必須一致.

2:命名管道:也是一種協(xié)議,相當于tcp/ip,在網(wǎng)絡(luò)流量比較小的使用命名管道比

使用tcp/ip更有效.[namepipes]

3:tcp/ip端口號的設(shè)置:默認為1433,可以改,c和s必須要一致.

4:強制使用協(xié)議加密:傳輸?shù)膮f(xié)議包中的數(shù)據(jù)都將加密.

5:啟用共享內(nèi)存:只有服務器和客戶端在同一臺計算機中時使用:

原理:服務器與客戶端共同使用同一個地址內(nèi)存,這樣服務器與客戶端就像是同一

個屋子的人一樣,可以很好的勾通.

6:別名:給服務器在客戶端換個需要的名字,但是其本質(zhì)不變.

3:服務器的屬性

查詢分析器的使用:

1:連接:

2:保存:

3:打開:

4:模板:創(chuàng)建一個語句一個范例.

5:在執(zhí)行一組sql語句時,如果該組語句中有一個是錯誤的,則整個語句將不會執(zhí)行.

除非分別執(zhí)行.[與事務無關(guān)]

創(chuàng)建和維護數(shù)據(jù)庫

在這一章里我們要掌握下面的內(nèi)容:

1:數(shù)據(jù)庫的邏輯結(jié)構(gòu):

2:數(shù)據(jù)庫的物理結(jié)構(gòu):

3:如何創(chuàng)建數(shù)據(jù)庫:

4:如何刪除數(shù)據(jù)庫:

5:如何修改數(shù)據(jù)庫:

6:如何強制數(shù)據(jù)脫機

7:快速查看數(shù)據(jù)庫的內(nèi)容:

8:附加和分離數(shù)據(jù)庫。

9:生成數(shù)據(jù)庫的sql腳本。

10數(shù)據(jù)庫復制向?qū)В?/p>

A:數(shù)據(jù)庫的邏輯結(jié)構(gòu):

通常我們在企業(yè)管理器中看到的數(shù)據(jù)庫和里面的對像都只是數(shù)據(jù)庫的邏輯結(jié)構(gòu)。也就是它

們并不像在企業(yè)管理器中所看到的那樣的結(jié)構(gòu)去存儲在計算機中。企業(yè)管理器只是為了方便

用戶查看數(shù)據(jù)和操作數(shù)據(jù)而在前臺表象上作了一個“虛假”的顯示結(jié)構(gòu)即為數(shù)據(jù)庫的邏輯結(jié)

構(gòu)。而數(shù)據(jù)庫中真正的數(shù)據(jù)是存儲在硬盤中。而且是以文件的形式來保存的。于是有了數(shù)據(jù)

庫的物理結(jié)構(gòu)。

B:數(shù)據(jù)庫的物理結(jié)構(gòu):

既然數(shù)據(jù)庫里面的所有數(shù)據(jù)是以文件的形式存儲在硬盤中,那么究竟一個數(shù)據(jù)庫庫由那樣文

件組成呢?組成一個數(shù)據(jù)庫的文件由以下三種文件組成:

1:主要數(shù)據(jù)文件:

作用:主要數(shù)據(jù)文件包含數(shù)據(jù)庫的初始信息。記錄數(shù)據(jù)庫還擁有那些文件,并且用來存儲

數(shù)據(jù)。如用戶建的表等數(shù)據(jù)。

特點:每一個數(shù)據(jù)庫有且只有一個主要數(shù)據(jù)文件。擴展名為mdf

2:次要數(shù)據(jù)文件:

作用:次要文件也是和來存儲數(shù)據(jù)庫中的各類信息的,用戶可以選擇是否需要次要數(shù)據(jù)文

件。也就是說它是可選的,它的擴展名為ndf

為什么要引入次要數(shù)據(jù)文件:

1:或許你的主要文件的數(shù)據(jù)非常龐大,以到于超過所在的硬盤分區(qū)。如果沒有次要數(shù)

據(jù)文件幫助則用戶添加的數(shù)據(jù)將不能加入到數(shù)據(jù)庫里面去。

2:可以為一個數(shù)據(jù)庫創(chuàng)建多個次要文件,并把這些文件放到不同的硬盤中,既可將一

個數(shù)據(jù)庫中的數(shù)據(jù)存儲在多個不同的物理硬盤中。[可以提高查詢效率:以下再作

解釋]

3:日志文件:我們知道由于關(guān)系型數(shù)據(jù)庫尊循“先寫日志再操作”的原則,所有必須有一個

文件來存儲用戶對該數(shù)據(jù)庫所作的一切的操作的筆記的文件這就是日志文件。擴展名為:Idf.

說明:一個數(shù)據(jù)庫必須至少有一個日志文件,也可以有多個日志文件。

所有一個數(shù)據(jù)庫基本上由這個三類文件組成。另外補充一點:

當你創(chuàng)建數(shù)據(jù)庫并指定一個數(shù)據(jù)文件或日志文件時,系統(tǒng)會讓你輸入兩種表示形式的文件

名:

一個是不帶路徑的文件名,一個是要帶路徑的文件。它們分別是:邏輯文件名,物理文件名

1:邏輯文件名:用于在sql語句命令中對該文件進行訪問,即不需要指明路徑。

2:物理文件名:是文件實際存儲在磁盤上的文件名,必須包括路徑,指明該文件在磁盤中

的什么位置。

總結(jié):邏輯文件名與物理文件名就像?個房主與房子地址一樣,我們用房子的主人就可以代

表房子本身即:房子的地址。

文件組

文件組:如果一個數(shù)據(jù)庫有很多文件就不便于管理了,為了管理和分配的目的sqlserver

允許你將多個文件歸納為一同一個組。這樣文件組中的文件就和其它文件組中的文件沒有直

接關(guān)系。這就是文件組。

說明:

1:一個數(shù)據(jù)庫里面必須有且僅有一個主文件組為:primaryfilegroup。用戶可以根據(jù)需

要來定義其它文件組。

2:一個文件只能屬于一個文件組,它不能同時屬于兩個文件組。

3:文件組只能夠管理數(shù)據(jù)文件,也就是日志文件不能放入文件組,因為日志文件是分開

管理的

4:所有建的次要數(shù)據(jù)文件如果不特別指定組則自動為放入primary組。

為什么要引入文件組:

1:sqlserver對文件組中的每個文件的填充策略:

如果用戶有數(shù)據(jù)要寫入文件組時(比如用戶建一個表,并指定它屬于的文件組時,之后用戶

對該表加入記錄)sqlserver會采用“按比例'填充的原則:即以屬于該組每個文件的可

用空間來比例來將數(shù)據(jù)分割并分別寫入每一個文件中。而不是先引寫入第一個文件,第一個

文件寫滿之后再寫第二文件.但是sqlserver對日志文件的數(shù)據(jù)分配是采用"寫滿為止"的策

略。

理由:

用戶可以在一個數(shù)據(jù)庫里面建多個數(shù)據(jù)文件并指定它們的“物理名”為不同的磁盤,然后

再把它們放入一個組中。這樣當用戶在這個組中創(chuàng)建一個表時這個表中的數(shù)據(jù)將按“比例填

充”方式放入該組中所有的數(shù)據(jù)文件中,這樣就可以實現(xiàn)把一個表中的數(shù)據(jù)放入多個磁盤,

即可以實現(xiàn)數(shù)據(jù)庫的“廣域”存儲

此時如果要對該表進行查詢,則多個磁盤的讀寫磁頭將能夠同時并行的訪問數(shù)據(jù),從而加快

數(shù)據(jù)庫的操作

怎樣使用文件組:

1:大多數(shù)的數(shù)據(jù)庫只需要一個主要數(shù)據(jù)文件和一個日志文件就中以非常好的運行。

2:如果在創(chuàng)建數(shù)據(jù)庫之前估計某個對像(如表)以后會占用大量數(shù)據(jù)則在數(shù)據(jù)庫創(chuàng)建時,

會在多個磁盤分別建立一個數(shù)據(jù)文件,然后把們屬于同一個組。然后把該對像放于該組,則

因為多個磁盤能并行操作而加快操作速度。

C:怎么創(chuàng)建數(shù)據(jù)庫:

1:通過企業(yè)管理器:

2:sql語句:

格式:

createdatabase數(shù)據(jù)庫名

on

primary

name=,數(shù)據(jù)文件1的邏輯文件名’,

filename?數(shù)據(jù)文件1的物理文件名',

size二大小,

maxsize二大小,

filegrowth二大小

name二'數(shù)據(jù)文件2的邏輯文件名’,

filename='數(shù)據(jù)文件2的物理文件名’,

size二大小,

maxsize二大小,

filegrowth二大小

),

filegroup用戶自定義文件組名

name='數(shù)據(jù)文件1的邏輯文件名’,

filename='數(shù)據(jù)文件1的物理文件名’,

size二大小,

maxsize二大小,

filegrowth二大小

name='數(shù)據(jù)文件2的邏輯文件名',

filename^數(shù)據(jù)文件2的物理文件名’,

size=大小,

maxsize=大小,

filegrowth=大小

),

logon

name=,日志文件1的邏輯文件名',

filename^數(shù)據(jù)文件1的物理文件名',

size=大小,

maxsize=大小,

filegrowth=大小

說明:

1:數(shù)據(jù)文件名之間不能同名,數(shù)據(jù)文件名與日志文件名也不能同名。

2:在給一個組加上文件時,每個文件之間用''逗號"隔

3:數(shù)據(jù)文件與日志文件的分界時不要加逗號。

4:由于日志文件不能放入任何組,所以不要為日志文件設(shè)定組。

5:如果不指明組則添加的數(shù)據(jù)文件都自動放入primary組。

6:必須有一個主數(shù)據(jù)文件

7:如果數(shù)據(jù)文件還有較大的空間但是日志文件的空間已占滿則對數(shù)據(jù)進行的所有更新操作將

都因無法寫入日志而終止。

例如

createdatabasetest

on

primary

(

name=,testT,

filename=,c:\cad\testl.mdf'

size=3,

maxsize=10,

filegrowth=10%

),

(

name='test2,,

filename='c:\cad\test2.ndf'

size=4,

maxsize=10,

filegrowth=12

),

filegrouptes

(

name='test3',

filename二'c:\cad\test3.ndf'

size=3,

maxsize=10,

filegrowth=10%

)

logon

(

name=,testl),

filename=,c:\cad\testl.ldf,

size=3,

maxsize=10,

filegrowth=10%

),

(

name=,test12',

filename='c:\cad\test2.Idf'

size=4,

maxsize=10,

filegrowth=12

)

創(chuàng)建了一個test數(shù)據(jù)庫,它有一個主數(shù)據(jù)文件testl,兩個次要數(shù)據(jù)文件test2,test3,一

個日志文件testl2

其中testl和test2在文件組primary里面,而test3在文件組tes里面.

D:怎么刪除數(shù)據(jù)庫:

1:通過企業(yè)管理器:

2:sql語句:

格式:dropdatabase數(shù)據(jù)庫名

說明:

1:數(shù)據(jù)庫刪除后,數(shù)據(jù)庫里面的數(shù)據(jù)文件與日志文件就會被刪除,系統(tǒng)數(shù)據(jù)庫master關(guān)于

該數(shù)據(jù)庫的信息也被刪除了。

2:建議在刪除數(shù)據(jù)庫之后立即備份master數(shù)據(jù)庫。否則你在刪除了一個數(shù)據(jù)庫之后而后卻

因為某種原.因還原了過去所備份的master數(shù)據(jù)庫,則會出錯。

3:master,model,msdb,tempdb這四個數(shù)據(jù)庫不能刪除。

4:如果數(shù)據(jù)庫正在被使用則不能刪除.

修改數(shù)據(jù)庫

A:更改數(shù)據(jù)庫的名字:sql:sprenamedb舊名,新名

說明:

修改數(shù)據(jù)庫的名字?定要小心,因為客戶端應用程序都是以原先的名字來訪問的。

必須確認沒以任何人連接以數(shù)據(jù)庫中才可以更名。

B:擴充分配給數(shù)據(jù)庫的數(shù)據(jù)文件或日志文件的空間:

你在創(chuàng)建數(shù)據(jù)時,可以設(shè)置數(shù)據(jù)庫文件的自動增長空間,事實上除了讓sqlserver自動

去擴充之外,還可以人工的方式來擴展數(shù)據(jù)庫,還可以為已經(jīng)創(chuàng)立的數(shù)據(jù)庫增加新的文件。

方法:企業(yè)管理器:數(shù)據(jù)庫,屬性

說明:在給已經(jīng)存在數(shù)據(jù)文件重新分配大小時,分配的大小不能比原來的小。

C:收縮分配給數(shù)據(jù)庫的數(shù)據(jù)文件或日志文件.

當你覺得你的數(shù)據(jù)庫的初始值設(shè)定過于大,或者增長方式設(shè)置不符合你的業(yè)務,以致使數(shù)

據(jù)庫產(chǎn)生多余的空間時,就可以收縮數(shù)據(jù)庫了。

方法:企業(yè)管理器“收縮數(shù)據(jù)庫”

說明:

1:收縮后文件的最大可用空間:可以指定個數(shù)值來決定收縮后文件的可用空間,數(shù)

值越大,收縮越小,反之收縮越大。

2:調(diào)度:可以讓sqlserver定期來收縮數(shù)據(jù)庫,從而實現(xiàn)自動化管理。

3:清空文件:清空數(shù)據(jù)文件或日志文件而該文件中的數(shù)據(jù)遷移到文件組中的其他文件

中。

4:收縮文件至:將選定的文件收縮到特定的大小。

5:在些時間之后收縮:到了某一時間之后再收縮。[預定義]

思考:能不能通過刪除數(shù)據(jù)文件或日志文件的方法來收縮數(shù)據(jù)庫。

D:添加或刪除數(shù)據(jù)文件和事務日志:

你可以添加數(shù)據(jù)文件或事務日志文件來擴充數(shù)據(jù)庫的大小,以可以通過刪除數(shù)據(jù)文件和事

務日志文件來收縮數(shù)據(jù)庫。下面著重來講解數(shù)據(jù)庫文件的刪除:

1:對于數(shù)據(jù)文件的寫入方式是“按比例”寫入,所以如果用戶要建一個表則該表

所屬的文件組中的任何一個數(shù)據(jù)文件都將或多或

小的寫入數(shù)據(jù)。

2:而日志文件的寫入方式是”寫滿為止"的策略來寫入,即只有當?shù)谝粋€日志

文件寫滿了之后才去寫下一個日志,這就是說如果你為一個數(shù)據(jù)庫建多個日志

文件,有可能有些日志文件是空的。

3:要刪除數(shù)據(jù)庫文件必須保證數(shù)據(jù)庫文件里面沒有任何數(shù)據(jù)。

4:可以得到要刪除數(shù)據(jù)文件必須首先將它里面的數(shù)據(jù)遷移動同一個文件組中

的其它文件里面去。

格式:

dbccshrinkfile(數(shù)據(jù)文件名,emptyfile)

5:方法:數(shù)據(jù)庫====屬性:

更改數(shù)據(jù)庫的所有者:

1:什么是所有者:數(shù)據(jù)庫的創(chuàng)建都就是數(shù)據(jù)庫的所有者(dbo)

2:數(shù)據(jù)庫所有者和sa對該數(shù)據(jù)庫有任何操作權(quán)限。

3:數(shù)據(jù)庫所有者與sa的區(qū)在于sa是全局的,而數(shù)據(jù)庫所有者是局部的。

4:格式:

sp_changedbowner登錄用戶名

說明:

1:只能夠更改當前數(shù)據(jù)庫的db。

2:如果指定的登錄名己經(jīng)是當前數(shù)據(jù)庫的用戶,則不能更改

更改數(shù)據(jù)庫的配置:

A:僅僅供數(shù)據(jù)庫擁有者或者sa能夠使用:

用途:當你作為一名數(shù)據(jù)庫管理員或數(shù)據(jù)庫的擁有者時需要改變表的結(jié)構(gòu)時,你不希望別

的用戶來使用該表,可以把此項設(shè)置,當你把表的結(jié)構(gòu)改了之后再把它改回來。

sql語句:

sp_dboption'數(shù)據(jù)庫名','dbouseonly',,true*[false]

B:單用戶:同時間只能夠有?位用戶連接到數(shù)據(jù)庫來訪問它:

用途:更改數(shù)據(jù)庫名稱,還原數(shù)據(jù)庫的時候。

sp-dboption'數(shù)據(jù)庫名','singleuser','true*[false]

C:只讀:使數(shù)據(jù)庫只讀。

sp-dboption數(shù)據(jù)庫名','readonly",'true'[false]

讓某個數(shù)據(jù)庫脫機(對數(shù)據(jù)庫進行改名時)

為什么要脫機:

可以強制讓某個數(shù)據(jù)庫斷開與各個客戶端的連接

usemaster

alterdatabase數(shù)據(jù)名setofflinewithROLLBACKIMMEDIATE

說明:

1:使數(shù)據(jù)庫脫機后,如果要使用該數(shù)據(jù)庫必須要聯(lián)機。(online)

2:經(jīng)常的操作是:

1):使數(shù)據(jù)庫脫機。

2):使數(shù)據(jù)庫聯(lián)機.

3):設(shè)置為單用戶。

4):并使用該數(shù)據(jù)庫

5):做自己的事件

6):還原數(shù)據(jù)庫的狀態(tài)

作業(yè):你作為一個管理員現(xiàn)在要把windows數(shù)據(jù)庫更名,但此時已經(jīng)有四位用戶在使用。

你該怎么辦:

1:首先netsend*"信息”[給每個客戶端發(fā)送信使信息]

2:斷開windows數(shù)據(jù)庫與所有客戶端的連接[不是關(guān)閉sqlserver服務]

3:把數(shù)據(jù)庫設(shè)置為僅供signleuseonly能夠使用

4:把數(shù)據(jù)庫更名

5:把數(shù)據(jù)庫設(shè)置為普通形式

6:參考下面的代碼:

usemaster

alterdatabase上上setofflinewithROLLBACKIMMEDIATE

usemaster

alterdatabasehhsetonlinewithROLLBACKIMMEDIATE

execsp-dboption'上上','singleuser','true"

execsp_renamedb'上上','下下'

execspdboption'下下','singleuser','false'

快速查看數(shù)據(jù)庫的內(nèi)容

1:企業(yè)管理器:

任務板:

A:常規(guī):給出關(guān)于數(shù)據(jù)庫?些詳細資料。

B:表:查看數(shù)據(jù)庫中各個表的詳細資料。

C:向?qū)В汉芊奖愕拇蜷_向?qū)Ш凸ぞ邅硗瓿刹僮鳌?/p>

附加和分離數(shù)據(jù)庫:

目的:就是移動數(shù)據(jù)庫的位置。

注意:在sql里面沒有復制,剪切,粘貼等命令。

用途:

1:將數(shù)據(jù)庫移動到其它已經(jīng)注冊到你的企業(yè)管理器的其它的sqlserver服務器中。

問題:要把服務器www中chen數(shù)據(jù)庫移動到test服務器中。

比較:

常規(guī)方法:

本方法:先讓chen與www分離,然后再把chen的數(shù)據(jù)文件和日志全部移動test

服務器中,接著再把www附加到test服務器

2:改變數(shù)據(jù)庫中數(shù)據(jù)文件或日志文件的磁盤的目錄:

比如存儲數(shù)據(jù)或日志文件的空間已不足了時你便要移動數(shù)據(jù)文件或日志文件的位置到其它

有更大的空間的位置上。

A:數(shù)據(jù)庫創(chuàng)建之后數(shù)據(jù)文件和日志文件的位置便不能更改。

B:只有把數(shù)據(jù)庫分離之后才可以改變。

操作:通過企業(yè)管理器

生成數(shù)據(jù)庫的sql腳本。

通過生成數(shù)據(jù)庫的sql腳本我們能夠產(chǎn)生創(chuàng)建現(xiàn)有數(shù)據(jù)庫各個數(shù)據(jù)庫對像的sql語句.然后

可以把此腳本再次運行。例能夠產(chǎn)生出一個和原原數(shù)據(jù)庫有相同結(jié)構(gòu)(不是數(shù)據(jù)也相同)的

新數(shù)據(jù)庫。

用途:

1:重新創(chuàng)建一個與某個數(shù)據(jù)庫結(jié)構(gòu)完全相同的數(shù)據(jù)庫。

比如:你在服務器A里面建了一個數(shù)據(jù)庫test,你現(xiàn)在要把test的結(jié)構(gòu)復制到B服務器

里面去(注意:不是數(shù)據(jù),僅僅是結(jié)構(gòu),也就是說對于表而言將不會有數(shù)據(jù)存在),那么你可

以先中服務器A中生成一個關(guān)于test數(shù)據(jù)庫的sql腳本,然后再在服務器B中去運行。

2:備份一個腳本,以便允許用戶可以重建所有的用戶,角色,登錄與權(quán)限。

比如:你好不容易在某個服務器上創(chuàng)立了一些數(shù)據(jù)庫用戶或角色,或登錄或權(quán)限。這個時

候你可以生成?個你當前創(chuàng)建這些對像的腳本,如果以后有人惡意刪除了這些對像,則可以

通過把這些代碼重新運行一次,重而免去重新創(chuàng)建這些對像的麻煩。

3:更新數(shù)據(jù)庫開發(fā)代碼。

比如你可以在生成sql腳本的基礎(chǔ)上,再對源代碼進行修改,從而可以在源數(shù)據(jù)庫的基礎(chǔ)上

擴展一些功能

方法:企業(yè)管理器:

說明:

1:為每個對像創(chuàng)建create命令:為用戶在常規(guī)選卡里面選擇的各對像創(chuàng)建create

語句。

2:生成全部相關(guān)腳本:生成在常規(guī)選卡中選中的與之相關(guān)的對像.

比如:如果你在常規(guī)選項卡里只選擇了視圖,而沒選擇了表,當你運行這種sql代碼就會出

錯。因為視圖需要表支持。如果選中些項則sql會自動將支持視圖的相關(guān)對像一起創(chuàng)建。

3:在腳本中包含說明性的標題:在生成代碼的同時,加上一些擁有說明性的文字

4:編寫數(shù)據(jù)庫腳本:要生成數(shù)據(jù)庫的代碼。

5:編寫數(shù)據(jù)庫的用戶和角色腳本:要生成數(shù)據(jù)庫的用戶和角色的代碼。

6:編寫sqlserver登錄腳本:要生成服務器登錄的腳本。

7:編寫對像級別權(quán)限的腳本:為你在“常規(guī)”頁面中選取的各個數(shù)據(jù)庫對像生成權(quán)限設(shè)

置sql代碼

題目:

1:在服務器A里面建了一個數(shù)據(jù)庫test,數(shù)據(jù)庫test有一個表tablel,table2,view(來自

于tablel).現(xiàn)在要把test的結(jié)構(gòu)復制到服務器B中,且讓B中不包含table2的結(jié)構(gòu)。

2:在服務器A里面建了一個數(shù)據(jù)庫test,建了兩個表tablel,table2,兩個視圖

viewl(來自于tablel),view2(來自于table2)?,F(xiàn)在由于意外刪除了全部的對像,現(xiàn)在

想重新得到兩個視圖。

3:有服務器A里面建了一個數(shù)據(jù)庫test,test數(shù)據(jù)庫里面有兩個表。tabel,table2,然后

建了兩個用戶

a,b,一個角色c它們的權(quán)限都能夠?qū)ablel,table2進行select操作?,F(xiàn)在由于意外刪

除了用戶和角色。

現(xiàn)在要求恢復。

4:在服務器A里面建了一個登錄用戶abc,能夠訪問數(shù)據(jù)庫chen.現(xiàn)在由于意外刪除了該登

錄用戶?,F(xiàn)在

要求恢復。

數(shù)據(jù)庫復制向?qū)?/p>

利用數(shù)據(jù)庫復制向?qū)?,我們可以很輕易地把一個服務器的數(shù)據(jù)庫復制到另外一個服務器中。

1:選擇是復制服務器的登錄用戶:

A:包運行時檢測到的所有登錄:將要復制的數(shù)據(jù)庫所在的服務器全部登錄帳戶復制到另外

一個服務器中

B:僅由數(shù)據(jù)庫使用的登錄:只復制“要復制的數(shù)據(jù)庫”使用的登錄的部分帳戶。

2:選擇master數(shù)據(jù)庫里面的共享存儲過程:

A:由包運行時檢測到的所有的存儲過程:將把要復制的數(shù)據(jù)庫所有服務器中master數(shù)

據(jù)庫里面的存儲過程都復制到目的服務器所在的master數(shù)據(jù)庫中。

B:用戶選定的存儲過程;可以決定要復制的數(shù)據(jù)庫所有服務器中master數(shù)據(jù)庫里面的

存儲那些要復制那些不要復制.

下面兩項一樣的

問題:

1:sqlserver中那個系統(tǒng)數(shù)據(jù)庫不需要備份?

2:在什么情況下應立即備份master數(shù)據(jù)庫。

3:范例數(shù)據(jù)庫pubs是由主要數(shù)據(jù)文件pubs.mdf利日志文件pubs-log.Idf所組成。如果要

改變它們的存儲位置應該怎么辦

數(shù)據(jù)庫作業(yè)練習:

1:創(chuàng)建一個數(shù)據(jù)庫為windows,有一個主要數(shù)據(jù)文件,windows,和兩個次要數(shù)據(jù)文件

windowsdatal,windowsdata2.位于

key組,和一個日志文件windowslog

2:刪除norwind數(shù)據(jù)庫(說明:什么情況下不能刪除該數(shù)據(jù)庫)

3:把windows數(shù)據(jù)庫改名為win

4:使用兩種方法把win數(shù)據(jù)庫擴充2MB空間

5:刪除windowsdatal文件,使win數(shù)據(jù)庫縮小

6:新建一個登錄陳文杰(通過企業(yè)管理器)

7:把陳文杰改為win的db。

8:新建兩個登錄(windows!.,windows2)

9:使用這兩個用戶登錄服務器時、能夠訪問win數(shù)據(jù)庫

10:設(shè)置數(shù)據(jù)庫配置,使只有sa,和win的dbo能夠訪問win數(shù)據(jù)庫.

11:設(shè)置數(shù)據(jù)庫使只有windows1能夠訪問win數(shù)據(jù)庫

12:使數(shù)據(jù)庫恢復常態(tài)

13:以sa,windowsl,windows2通過查詢分析器來登錄服務器并使用win數(shù)據(jù)庫

14:讓sa強制斷開與windows1和windows2的連接后,并讓windows!,和windows2始終不

能連上win

15:再次使數(shù)據(jù)庫的名字改為winpro

16:把數(shù)據(jù)庫winpro復制一份為winprol(兩種方法)

16:把數(shù)據(jù)庫winpro的數(shù)據(jù)文件和日志文件改變路徑

17:為了備份數(shù)據(jù)庫,創(chuàng)建關(guān)于winpro的一份sql腳本

18:刪除winpro,并以sa打開查詢分析器,重新生成winpro的數(shù)據(jù)庫結(jié)構(gòu)

創(chuàng)建和維護表(tables)

在這一章里,我們要學習以下幾點內(nèi)容

1:表的結(jié)構(gòu):

2:創(chuàng)建表:

3:自動編號字段

4:活用用戶定義數(shù)據(jù)類型:

5:創(chuàng)建計算字段:

6:快速查看、添加、修改與刪除數(shù)據(jù)記錄

7:更改表的結(jié)構(gòu)

8:更改表的名稱:

9:更改表的所有者

10:刪除表

11:用戶表與臨時表與系統(tǒng)表

A:表的結(jié)構(gòu):

表的結(jié)構(gòu)基本決定了表擁了那些字段名、使用的數(shù)據(jù)類型、

1:字段名:(field)

1)字段名最長可達128個字符

2)同一個表中字段名絕對不能重復

2:長度、精度和小數(shù)位數(shù),NULL值。

1)長度:指字段所能容納的最大數(shù)據(jù)量。對于不同類型的數(shù)據(jù),長度對字段的意義可

能有些不同

對于字符型數(shù)據(jù)類型而言:長度代表字段所能容納的字符的數(shù)目,因此它會限

制用戶所能輸入的的文本長度[長度可以修改]

二:對于數(shù)值型數(shù)據(jù)而言:長度則代表字段使用多少個字節(jié)來存放數(shù)據(jù),它決定了

字段所能存放的最大數(shù)最小數(shù)[長度固定不能更改]:

比如:int4字節(jié):=4*8=32位,則最大的數(shù)為:-231-----231-1

注意:tinyint除外:(0一255)

商品編號:100

商品名;10個漢字

單價:1000,保留兩位小數(shù)

庫存量:200

2)精度:一般精度是相對于小數(shù)而言,表示數(shù)中數(shù)字的個數(shù)。

3)小數(shù)位數(shù):則數(shù)字小數(shù)點后數(shù)字的位數(shù)。

比如:1234.678其精度是:7(不包括小數(shù)點),小數(shù)位數(shù)是:3

說明:有些數(shù)據(jù)類型精度,小數(shù)位數(shù)都不能改,有些可以改。

decimal,numeric

2:數(shù)據(jù)類型:(datatype)

特殊的類型:char,varchar的區(qū)別,精確數(shù)據(jù)類型:decimal,numeric[都可以指定小

數(shù)數(shù)位數(shù)和精度]

image,money[固定保留四位小數(shù)],datatime,bigint,intsmal1int

tinyint

3:NULL值:

1:NULL值并不等于數(shù)值0,空格,它是虛無值。

2:NULL值是說此字段中的數(shù)據(jù)是否可以是末知的或末定義的,如果允許為NULL則該

字段的數(shù)據(jù)是充許末知,否則只能是已知的

3:快捷方式:ctrl+0

B:創(chuàng)建表:

1:通過企業(yè)管理器:

1:添加或插入字段:

2:刪除字段:

3:表的屬性窗口:A:所有者[該表所在的數(shù)據(jù)庫里必須有用戶],表名、表文件組,

備注,是否為空

4:描述,默認值,精度,小數(shù)位數(shù),標識,標識種子,標識遞增量。[如果把某一

個列定義成為標識列,則該列不能編輯]

說明:

一個數(shù)據(jù)庫包括表最多只能夠有232-1方個對像

每一個表最多可以擁有最多1024個字段

2:通過sql語句。

格式:

createtable表名

(

列名1數(shù)據(jù)類型(長度)notNULL[NULL],

列名2數(shù)據(jù)類型(長度)notNULL[NULL],

)

[on][放入指定的文件組]

說明:

1:對于字符型要指明長度比如:職工號char(20),姓名vchar(20)

2:對于除decimal,numeric(6,2)以外的數(shù)值型類型,不需要指明指定長度。比如:基

本工資int

單價FLOAT

3:可以對每個字段指定是否充許為空,如果省略則可以為空。[notnull]

4:可以指定把創(chuàng)建的表放入一個文件組,如果省略則自動放入primary組。[該組必須

存在]

自動編號

說明:

1:自動編號的字段類型只能是以下幾種:int字樣的數(shù)據(jù)

2:如果把某一個字段設(shè)置為自動編號,則用戶不能去更改里面的內(nèi)容

3:每一個表只能擁有一個自動編號字段

活用用戶自定義類型

1:為什么要使用用戶自定義類型:

理由:有時候為了建多個表,而這些表中都具有相同類型相同格式的某一種系

統(tǒng)數(shù)據(jù)類型。如果每次建一個表都要去設(shè)置很不劃算,可以引入用戶

自定義類型。

2:怎么定義或使用用戶自定義類型:

A:通過企業(yè)管理器:

1):將用戶類型指定某個規(guī)則,則使用該類型的列,都將遵守該規(guī)則。

2):將用戶類型指定某個默認值,則使用該類型的列,都將有了該默認

3:刪除用戶自定義類型:

1:顯示相關(guān)性:

A:單右一>相關(guān)性:只能看到該類型被那些表使用,但不能知道被表的

那些字段使用。

B:單右-->屬性一>使用位置:可以看到該類型被那些表的那些字段使

用了

2:如果該數(shù)據(jù)類型被其它對像使用,則不充許刪除

說明:

1:在某一個數(shù)據(jù)庫里創(chuàng)建的用戶自定義數(shù)據(jù)類型只能夠被該數(shù)據(jù)庫的對像

使用。不能被其它數(shù)據(jù)使用。

2:問題:如何創(chuàng)建一個數(shù)據(jù)類型可以讓新建的數(shù)據(jù)庫都可以使用?

創(chuàng)建計算字段:

計算字段:計算字段不是表中建的字段,而是由表中其它字段通過計算而得來的。

比如:單價*數(shù)量=銷售量

1:為什么要創(chuàng)建計算字段:

1:怎么創(chuàng)建計算字段:創(chuàng)建表的時候才能夠創(chuàng)建計算型字段

A:通過sql語句:

比如:

createtableww

(

商品名vchar(lO),單價float,銷售量int,總金額as單價*銷售量

)

B:格式為:計算字段名as表中字段表達式。

C:通過企業(yè)管理器:公式列中進行

注意:計算字段也要以參與查詢,但不能更新

快速查看、添加、修改、刪除數(shù)據(jù)記錄

1:查看:打開表。

2:添加:直接加。

3:刪除數(shù)據(jù):刪除一行,刪除多行

4:打開表,單右:菜單

更改表的結(jié)構(gòu):

1:通過企業(yè)管理器:

2:使用sql語句

格式:

1:修改原有字段的數(shù)據(jù)類型

altertable表名

altercolumn列名新的數(shù)據(jù)類型

說明:

1:一次只能修改一個字段的數(shù)據(jù)類型。

2:不能修改計算字段,或使用在計算字段中的列。

上述命令只能夠修改數(shù)據(jù)類型不能修改字段名稱。要修改字段名稱可以用:

sp_renamecolumn的列名,格式:

sp_rename'表名.舊列名','新列名','column'

2:在原有表的基礎(chǔ)上添加新的字段。

altertable表名

add數(shù)據(jù)的字段名數(shù)據(jù)類型[添加時,沒有column關(guān)鍵字]

可以一次添加多個字段,字段與字段之間用逗號隔開

3:刪除原有表的字段:

altertable表名

dropcolumn列名[刪除時,需要column關(guān)鍵字

1:可以一次刪除多個字段,字段與字段之間用逗號隔開

2:可以刪除計算字段,但不能刪除使用在計算字段中的列。

更改表的名稱

1:企業(yè)管理器:

2:sql語句:

格式:

sp_rename舊表名,新表名

說明:

1:如果一個表被某個或多個對像引用,則不要改名,否則會使這些對象不可用。

2:不要對系統(tǒng)表改名,這有可能會使系統(tǒng)損壞

更改表的所有者:

1:通過企業(yè)管理器:

2:sql格式:

spchangeobjectsowner'舊擁有者.表名‘,’新的數(shù)據(jù)庫用戶’

刪除表

1:通過企業(yè)管理器:

1:刪除前的準備:查看有那些對像在引用些表

2:刪除:

2:sql語句:

格式:

droptable表名

可以一次性刪除多個表,表名和表名之間用逗號隔開

用戶表臨時表系統(tǒng)表

sqlserver把整個表分成三種類型:用戶表,系統(tǒng)表,臨時表。

用戶表和系統(tǒng)一已經(jīng)熟悉。

臨時表:

什么是臨時表:就是臨時存放數(shù)據(jù)的地方,一亙不使用時會自動刪除。

為什么要使用臨時表:有時候在進行數(shù)據(jù)操作時,希望產(chǎn)生一些階段性或者過濾性的數(shù)據(jù),

這些數(shù)據(jù)只是暫時使用,而當工作結(jié)束時.,我們希望它們能自動刪除,而不是人為去刪除。

這個時候我們就需要臨時表。

臨時表的分類:

1:本地臨時表:

創(chuàng)建本地臨時表:當你創(chuàng)建本時,在表名字前面加上號,則這個表就成為本地臨時表?

特點:本地臨時表只有創(chuàng)建它的用戶可以訪問它,其它用戶將不能訪問,而且一旦這位用

戶斷開與sqlserver的連接,本地臨時表會自動刪除。

2:全局臨時表:

創(chuàng)建全局臨時表:當你創(chuàng)建本時,在表名字前面加上"##"號,則這個表就成全局臨時表。

特點:當一個用戶創(chuàng)建一個全局臨時表時,其它連接到sqlserver服務器的用戶都可以使

用,當創(chuàng)建者與服務器斷開后,sqlserver并不會立即刪除該用戶所創(chuàng)建的全局臨時表,而

是會去檢查當前還沒有別的用戶的作業(yè)在訪問該表,如果有,則暫時不刪除全局臨時表,但

是不充許用戶再去訪問它,直到在sqlserver服務器再沒有關(guān)于該表的作業(yè)時,才刪除。

設(shè)計數(shù)據(jù)完整性

本章主要學習以下內(nèi)容:

1:什么是數(shù)據(jù)完整性

2:數(shù)據(jù)完整性的分類

3:用約束實施完整性

4:用主鍵實施完整性

5:用unique約束實施完整性

6:用check約束實施完整性

7:使用外鍵實施完整性

8:使用規(guī)則

9:使用默認值

10:使用identity標識列

什么是數(shù)據(jù)完整性

數(shù)據(jù)庫中的數(shù)據(jù)的正確性和相容性。設(shè)計數(shù)據(jù)庫的完整性的目的是為了防止數(shù)據(jù)庫中存

在不符合語義的數(shù)據(jù),防止錯誤信息的輸入主要包含以下幾個方面的內(nèi)容

A:數(shù)據(jù)類型必須正確。比如:一個姓名決不可能是數(shù)值型

B:數(shù)據(jù)值必須處于正確的范圍內(nèi):如工人的年齡應該是20——50歲之間

C:數(shù)據(jù)的存在必須能夠確保同?表格數(shù)據(jù)之間的和諧關(guān)系:

列如:已存在一個職工編號為01的職工,則不充許出現(xiàn)另外一個01的職工

D:數(shù)據(jù)的存在必須能夠確保維護不同表格的數(shù)據(jù)之間的和和諧關(guān)系:

歹IJ如:work表中有某個職工屬于某個部門,則部門表也應該對這個部門作了記錄

數(shù)據(jù)完整性的分類:

1:實體完整性:

實體完整性的基本思想是標識數(shù)據(jù)中存放的每一個實體。每一個實體都要求保持惟一性

例如:

有work表:職工號,姓名,性別....在這個表中要使用每個工人都不相同可以設(shè)置職工

號為"主鍵”

2:值域完整性:

表中的每個字段取值必須符合邏輯:比如:性別只能是男或女,年齡不能為負數(shù),職工號

決不能為null

3:引用完整性:

引用完整性是在插入或刪除數(shù)據(jù)時,維護表格間數(shù)據(jù)一致性的手段。例如:

職工工資表:職工住址表

職工號職稱基本工資職工號姓名性別地址

01經(jīng)理100001張三男北京

02廠長150002李四女南京

在職工工資表中增加一個新的職工時,為了保證“職工工資表"與“職工住址表''的對應關(guān)系

一定也要在“職工住址表”中添加相應的記錄

若要刪除職工工資表中“01”的這個職工時,也要對應地在"職工住址表"中刪除"01”這個職工

4:用戶自定義完整性

用戶自定義完整性主要是體現(xiàn)實際運用的業(yè)務規(guī)則,例如:

規(guī)定"基本工資”>100并且<6000等。再如:規(guī)定姓名中不許出現(xiàn)有"張"姓等

sqlserver實施數(shù)據(jù)完整性的途徑

sqlserver主要使用三種方式來實施數(shù)據(jù)完整性它們是:

使用約束來實施數(shù)據(jù)完整性,使用規(guī)則來實施數(shù)據(jù)完整性,使用默認值,使用標識列

A:使用約束來實施數(shù)據(jù)完整性

約束(constraint)的用途是限制輸入到表中的值的范圍。sqlserver根據(jù)不同的用途提供了

多種約束

1:primarykey[主鍵]約束

2:foreignkey[外鍵]約束

3:unique[惟一]約束

4:check[核查]約束

約束可以分為表級約束和列約束兩種。

列級約束:列級約束是行定義的一部分,只能應用于一列上:

表級約束:表級約束是定義獨立于列的定義,可以應用在一個表中的多列上。下面分別講解

primarykey約束

1:primarykey約束利用表中的一列或多列數(shù)據(jù)來惟一地標識一個記錄。在表中絕對不充許

有主鍵相同的行存在,受主鍵約束的列決不能為null值,?個表只能有?個主鍵對主鍵操

作的方式有三種

A:在創(chuàng)建表格時定義主鍵,主鍵是定義表格的一部分。

格式為:

createtable表名

(

列名1數(shù)據(jù)類型1,

列名2數(shù)據(jù)類型2,

[constraint約束名]primarykey(列名1,列名2...列名n)

)

比如:createtableww

(

職工編號varchar(10),

姓名varchar(10),

primarykey(職工編號)

)

說明:

可以省略了〃constraint約束名〃,系統(tǒng)會自動加上去.但建議用戶取一個名字。因為如果

以后要刪除這個約束時「將因不知道該約束的名而沒有辦法刪除

創(chuàng)建表級主鍵約束。

createtable班級學生

(

班級varchar(10)notnull,

學號varchar(10),notnul1

姓名varchar(10),

constrainta[約束名]primarykey(班級,學號)

)

B:在一個沒有定義主鍵的表上添加?個主鍵

格式:

altertable表名

add[contraint約束名]

primarykey(列名L,列名n)

列如:

先定義一個表work

createtablework

(

職工號varchar(10)notnull,

姓名varchar(10),

性別varchar(10)

)

然后再執(zhí)行:

altertablework

add[constraint職工號]

primarykey(職工號)

試定義一個表

createtable班級學生

(

班級varchar(10)notnull,

學號varchar(10),notnull

姓名varchar(10),

)

然后以班級和學號建一個表級主鍵:

altertable班級學生表

add[constraint班級學號]

primarykey(班級,學號)

說明:當在一個已經(jīng)存放了數(shù)據(jù)的表上增加主鍵時,sqlserver會自動對表中的數(shù)據(jù)進行檢

查,以確保這些數(shù)據(jù)能否滿足主鍵約束。當向不符合主鍵要求的表中增加主鍵時.,sqlserver

會返回錯誤信息并拒絕加入主鍵.

試一試:

createtable職工管理

(

職工編號,varchar(10),

姓名,varchar(10),

性別varchar(10)

)

再執(zhí)行:

altertable職工管理

addconstraint職工號primarykey(職工號)

C:修改或刪除表上已建立的主鍵

說明:

1:修改表上已建立的主鍵時,只能先刪除原先的主鍵后再重新建立一個新的主鍵

2:刪除主鍵的格式:altertable表名drop主鍵名

3:當主鍵被別的外鍵作用時,不充許刪除主鍵婁將引用主鍵的外鍵刪除。

把workl表與部門表作一個外鍵。

把workl的職工號作為主鍵,把部門表的部門編號作為主鍵

主鍵表:外鍵表

部門表workl

試著去執(zhí)行語句:altertable部門droppk一部門[看能否成功]

通過企業(yè)管理器:添加,刪除,修改:主鍵

使用unique約束

unique約束是用來確保不受主鍵約束列上的數(shù)據(jù)的惟?性。unique與primarykey的區(qū)

別在于:

1:unique約束主要用于非主鍵的一列或多列上要求數(shù)據(jù)惟一.

2:unique約束充許該列上存在NULL的值,而主鍵決不充許出現(xiàn).

3:可以在一個表創(chuàng)建多個unique約束,而在一個表上只能夠設(shè)置一個主鍵

對unique的執(zhí)行操作方式也有3種

1:在創(chuàng)建表格時定義

createtable表名

列名1數(shù)據(jù)類型

列名2數(shù)據(jù)類型

unique(列1,列2....列n)

例如:

createtable商品

商品編號varchar(10),

商品名varchar(10),

庫存量int,

單價float,

constraint商品名unique(商品名),

constraint商品編號primarykey

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論