




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章表、視圖及索引的基本操作4.1SQLServer中的數(shù)據(jù)類型4.2表的基本操作4.3視圖的基本操作4.4索引的基本操作4.5本章小結(jié)
4.1SQLServer中的數(shù)據(jù)類型
4.1.1數(shù)據(jù)類型
在建立SQLServer的表格時(shí),要求用戶先對(duì)數(shù)據(jù)庫列進(jìn)行數(shù)據(jù)類型的確定。定義表列的數(shù)據(jù)類型后,數(shù)據(jù)列的數(shù)據(jù)類型將作為表的永久屬性加以保存,普通用戶是無法對(duì)其進(jìn)行修改的。因此,建立自己的表格前,先全面理解SQLServer數(shù)據(jù)類型并精心選擇表格列的數(shù)據(jù)類型,是保證創(chuàng)建的數(shù)據(jù)表格滿足設(shè)計(jì)需求和表格性能良好的前提。
1.系統(tǒng)數(shù)據(jù)類型
1)整型數(shù)據(jù)類型
整型數(shù)據(jù)類型用來存儲(chǔ)整數(shù)。在SQLServer系統(tǒng)中支持3種類型的整型數(shù)據(jù)類型。
Int或Integer:整數(shù)型,長(zhǎng)度為4個(gè)字節(jié),可以存儲(chǔ)從-2147683647~2147683647之間的所有正負(fù)整數(shù)。
Smallint:短整數(shù)類型,長(zhǎng)度為2個(gè)字節(jié),存儲(chǔ)范圍較
Int或Integer小,可以存儲(chǔ)從-32768~32767之間的所有正負(fù)整數(shù)。
2)浮點(diǎn)數(shù)據(jù)類型
浮點(diǎn)數(shù)據(jù)類型可以用來存儲(chǔ)含小數(shù)的十進(jìn)制數(shù)。浮點(diǎn)類型的數(shù)據(jù)在SQLServer中采用只入不舍的方式進(jìn)行存儲(chǔ)。
Real:長(zhǎng)度為4個(gè)字節(jié)??梢源鎯?chǔ)-3.40E+38~3.40E+38之間的十進(jìn)制數(shù)值,最大可以有7位精確位數(shù)。
Float:可以精確到第15位小數(shù),其范圍從-1.79E-308~1.79E?+?308。
Decimal和Numeric:Decimal數(shù)據(jù)類型和Numeric數(shù)據(jù)類型完全相同,它們可以提供小數(shù)所需要的實(shí)際存儲(chǔ)空間,但也有一定的限度,可以用2~17個(gè)字節(jié)來存儲(chǔ)從-1038~1038-1之間的數(shù)值。
3)字符數(shù)據(jù)類型
字符數(shù)據(jù)類型可以用來存儲(chǔ)各種由字母、數(shù)字和符號(hào)組成的字符串。在SQL中輸入字符數(shù)據(jù)時(shí),必須將數(shù)據(jù)引在單引號(hào)中,否則SQL不能接受該字符數(shù)據(jù)。
Char:其定義形式為char(n),每個(gè)字符和符號(hào)占用一個(gè)字節(jié)的存儲(chǔ)空間。其中n表示該字符數(shù)據(jù)的字節(jié)長(zhǎng)度,注意該長(zhǎng)度只能取1~255之間的數(shù)。長(zhǎng)度超過規(guī)定范圍,則系統(tǒng)只取規(guī)定范圍內(nèi)的字符串;長(zhǎng)度不足規(guī)定范圍時(shí),則字符串后面的位置將被空格填充。
Varchar:其定義形式為varchar(n)。用Varchar數(shù)據(jù)類型可以存儲(chǔ)長(zhǎng)達(dá)255個(gè)字符的可變長(zhǎng)度字符串。
Nchar:其定義形式為nchar(n),用于支持存儲(chǔ)固定長(zhǎng)度的國(guó)際上的非英語語種字符串。
Nvarchar:其定義形式為nvarchar(n),用于支持存儲(chǔ)可變長(zhǎng)度的國(guó)際上的非英語語種字符串。
4)日期和時(shí)間數(shù)據(jù)類型
日期和時(shí)間數(shù)據(jù)類型用于存儲(chǔ)日期和時(shí)間數(shù)據(jù)。它有下面兩種形式,區(qū)別在于存儲(chǔ)長(zhǎng)度以及所代表的時(shí)間范圍和存儲(chǔ)精確度的不同。
Datetinme:用于存儲(chǔ)日期和時(shí)間的結(jié)合體。它可以存儲(chǔ)從公元1753年1月1日零時(shí)起到公元9999年12月31日23時(shí)59分59秒之間的所有日期和時(shí)間。
Smalldatetime:與Datetime數(shù)據(jù)類型類似,但其日期時(shí)間范圍較小,它存儲(chǔ)從1900年1月1日到2079年6月6日內(nèi)的日期。
5)文本和圖形數(shù)據(jù)類型
Text:文本數(shù)據(jù)類型是用來存儲(chǔ)可變長(zhǎng)度的文本數(shù)據(jù)。Text存儲(chǔ)大量文本數(shù)據(jù)時(shí),其容量理論上為231-1(2147483647)個(gè)字節(jié),但實(shí)際應(yīng)用時(shí)要根據(jù)硬盤的存儲(chǔ)空間而定。用戶在向Text類型的數(shù)據(jù)項(xiàng)中寫入數(shù)據(jù)時(shí),必須將寫入的數(shù)據(jù)引在單引號(hào)下,如‘studentnameis:’。
Ntext:與Text數(shù)據(jù)類型類似,存儲(chǔ)在其中的數(shù)據(jù)通常是直接能輸入到顯示設(shè)備上的字符,顯示設(shè)備可以是顯示器、窗口或打印機(jī)。
Image:用于存儲(chǔ)照片、目錄圖片或者圖畫,其理論容量為231-1個(gè)字節(jié)。
6)貨幣數(shù)據(jù)類型
Money:用于存儲(chǔ)貨幣值,存儲(chǔ)在Money數(shù)據(jù)類型中的數(shù)值以一個(gè)正數(shù)部分和一個(gè)小數(shù)部分分別存儲(chǔ)在兩個(gè)4字節(jié)的整型值中,存儲(chǔ)范圍為-922337213685477.5808~922337213685477.5808,精度為貨幣單位的萬分之一。
Smallmoney:與Money數(shù)據(jù)類型類似,但其存儲(chǔ)的貨幣值范圍比Money數(shù)據(jù)類型小,其存儲(chǔ)范圍為-214748.3468~214748.3467。
7)位數(shù)據(jù)類型
Bit:稱為位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取值:0和1,長(zhǎng)度為1字節(jié),用來做為邏輯變量使用。
8)二進(jìn)制數(shù)據(jù)類型
Binary:其定義形式為Binary(n),數(shù)據(jù)的存儲(chǔ)長(zhǎng)度是固定的,即n+4字節(jié),當(dāng)輸入的二進(jìn)制數(shù)據(jù)長(zhǎng)度小于n時(shí),余下部分填充0。
Varbinary:其定義形式為Varbinary(n),數(shù)據(jù)的存儲(chǔ)長(zhǎng)度是變化的,它為實(shí)際所輸入數(shù)據(jù)的長(zhǎng)度加上4個(gè)字節(jié)。其他含義同Binary。
9)特殊數(shù)據(jù)類型
Timestamp:稱為時(shí)間戳數(shù)據(jù)類型,它提供數(shù)據(jù)庫范圍內(nèi)的唯一值,反應(yīng)數(shù)據(jù)庫中數(shù)據(jù)修改的相對(duì)順序,相當(dāng)于一個(gè)單調(diào)上升的計(jì)數(shù)器。
Uniqueidentifier:用于存儲(chǔ)一個(gè)16字節(jié)長(zhǎng)的二進(jìn)制數(shù)據(jù)類型,它是SQLServer根據(jù)計(jì)算機(jī)網(wǎng)絡(luò)適配器地址和CPU時(shí)鐘產(chǎn)生的唯一號(hào)碼而生成的全局唯一標(biāo)志符號(hào)代碼(GloballyUniqueIdentifier,GUID)。
10)新增數(shù)據(jù)類型
Bigint:用于存儲(chǔ)-263-1(-9223372036854775807)~263-1(9223372036854775807)之間的所有正負(fù)整數(shù)。
sql_variant:用于存儲(chǔ)除文本、圖形數(shù)據(jù)(text、ntext、image)和timestamp類型數(shù)據(jù)外的其他任何合法的SQLServer數(shù)據(jù)。此數(shù)據(jù)類型大大方便了SQLServer的開發(fā)工作。
Table:用于存儲(chǔ)對(duì)表或視圖處理后的結(jié)果集。這一新類型使得變量可以存儲(chǔ)一個(gè)表,從而使函數(shù)或過程返回查詢結(jié)果更加方便、快捷。
2.用戶定義數(shù)據(jù)類型
1)利用系統(tǒng)存儲(chǔ)過程定義和刪除用戶自定義數(shù)據(jù)類型
語法:
(1)定義用戶自定義數(shù)據(jù)類型:
sp-addtype[@typename]type,
[@phystype]system-data-type
[,[@nulltype=]null-type]
[,[@owner=]owner-name]
(2)刪除用戶自定義數(shù)據(jù)類型:
sp-droptype[@typename=]type
【例1】利用sp-addtype定義一個(gè)新的數(shù)據(jù)類型phone。
Execsp-addtypephone,‘char(10)’
所定義的數(shù)據(jù)類型名稱是phone,基于char(10)。
【例2】利用sp-addtype定義一個(gè)新的數(shù)據(jù)類型birthday。
Execsp-addtypebirthday,DATETIME,‘NULL’
所定義的數(shù)據(jù)類型名稱是birthday,基于DATETIME。
2)利用企業(yè)管理器定義和刪除用戶自定義數(shù)據(jù)類型
以上面的用戶自定義數(shù)據(jù)類型phone為例,說明如何通過企業(yè)管理器來定義和刪除。圖4-1創(chuàng)建用戶自定義數(shù)據(jù)類型圖4-2創(chuàng)建用戶自定義數(shù)據(jù)類型phone
3)使用用戶自定義數(shù)據(jù)類型
用戶自定義數(shù)據(jù)類型創(chuàng)建好后,可以像系統(tǒng)數(shù)據(jù)類型一樣使用。下面的創(chuàng)建表student-info的createtable定義語句中就使用了上面所定義的數(shù)據(jù)類型(注意黑體字)。4.1.2空置的含義
空值(NULL)不等于0,代表空白或零長(zhǎng)度的字符串,意味著沒有輸入,表明未知或未定義。使用時(shí)應(yīng)注意避免用空值直接參與運(yùn)算,盡量不要允許用空值(用默認(rèn)值解決沒有輸入的問題)。
4.2表的基本操作
4.2.1創(chuàng)建表
在SQLServer中,表存儲(chǔ)在數(shù)據(jù)庫中。數(shù)據(jù)庫建立后,接下來就該建立存儲(chǔ)數(shù)據(jù)的表,并對(duì)表進(jìn)行修改和刪除。
1.使用企業(yè)管理器創(chuàng)建表
使用企業(yè)管理器建立一個(gè)表的過程非常簡(jiǎn)單。下面以在學(xué)生成績(jī)管理數(shù)據(jù)庫中建立學(xué)生表為例,說明建立表的具體操作步驟。圖4-3學(xué)生表的各個(gè)字段圖4-4保存學(xué)生表
圖4-5課程表的結(jié)構(gòu)
圖4-6成績(jī)表的結(jié)構(gòu)
2.使用Transact-SQL創(chuàng)建表
createtabletable_name
(column_namedate_type[null|notnull][,…n])
【例3】use學(xué)生成績(jī)管理
createtablexs
(學(xué)號(hào)char(10)notnullprimarykey,
姓名char(8)notnull,
專業(yè)名char(16)null,
性別bitnotnull,
出生日期smalldatetimenotnull,
總學(xué)分tinyintnull,
備注textnull)4.2.2修改表結(jié)構(gòu)
1.使用企業(yè)管理器修改表結(jié)構(gòu)
表結(jié)構(gòu)的修改和查看的操作步驟是相同的,下面給學(xué)生表中加入“民族”字段。圖4-7插入“民族”字段
2.使用Transact-SQL修改表結(jié)構(gòu)
1)修改表結(jié)構(gòu)——添加列
向表中增加一列時(shí),應(yīng)使新增加的列有默認(rèn)值或允許為空值,SQLServer將向表中已存在的行填充新增列的默認(rèn)值或空值,如果既沒有提供默認(rèn)值也不允許為空值,那么新增列的操作將出錯(cuò)。向表中添加列的語句格式如下:
altertable表名add列名列的描述
【例4】為xs表增加“獎(jiǎng)學(xué)金”列。
altertablexsadd獎(jiǎng)學(xué)金smallmoneynull
2)修改表結(jié)構(gòu)——?jiǎng)h除列
如果某一列不再需要,可將其刪除,但有下列情況不可刪除:
(1)該表正在復(fù)制;
(2)用在索引中的列;
(3)用在check、foreignkey、unique或primarykey約束中的列;
(4)與default定義關(guān)聯(lián)或綁定到某一默認(rèn)對(duì)象;
(5)綁定到規(guī)則的列;
(6)已注冊(cè)為全文本支持;
(7)用做表的全文鍵。刪除一列的語句格式為:
altertable表名dropcolumn列名
【例5】altertablexsdropcolumn總學(xué)分。
3)修改表結(jié)構(gòu)—修改列定義
表中的每一列都有一組屬性,如列名、數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度以及是否允許為空值等,列的所有屬性構(gòu)成列的定義,這些屬性都可以在表創(chuàng)建好以后修改。修改列定義的語句格式為:
altertable表名altercolumn列名列的描述
【例6】修改表中已有列的屬性,將“姓名”這一列的長(zhǎng)度由原來的8位改為18位。
altertablexsaltercolumn姓名char(18)4.2.3建立表間的聯(lián)系
下面建立上述3個(gè)表的關(guān)聯(lián),操作步驟如下:圖4-8選擇要添加的表圖4-9顯示所選擇表圖4-10“創(chuàng)建關(guān)系”對(duì)話框圖4-11建立的學(xué)生成績(jī)管理數(shù)據(jù)庫中各個(gè)表之間的關(guān)系圖4-12保存關(guān)系圖4.2.4插入表中的記錄
1.在企業(yè)管理器中向數(shù)據(jù)表插入數(shù)據(jù)
(1)展開數(shù)據(jù)庫,單擊“表”。
(2)在詳細(xì)列表中右擊需插入數(shù)據(jù)的表名稱,在彈出菜單中選擇“打開表”下的“返回所有行”命令。
(3)如果屏幕彈出SQLServer登錄窗口,則輸入登錄帳號(hào)和密碼,按“確定”按鈕后,屏幕顯示數(shù)據(jù)表的內(nèi)容。
(4)此時(shí)彈出查詢?cè)O(shè)計(jì)器的結(jié)果窗格,在該窗格中可以向表中添加新記錄,也可以修改和刪除表中已有的記錄。
2.使用insert語句插入數(shù)據(jù)
語法格式為:insert[into]表名[(字段列表)]values(相應(yīng)的值列表)
1)添加數(shù)據(jù)到一行中的所有列
當(dāng)將數(shù)據(jù)添加到一行的所有列時(shí),使用values關(guān)鍵字來給出要添加的數(shù)據(jù)。insert語句中無需給出表中的列名,只要values中給出的數(shù)據(jù)與用createtable定義表時(shí)給定的列名順序相同即可。
【例7】insertintoxsvalues(‘0002’,‘張玲’,‘會(huì)計(jì)學(xué)’,0,‘1992-5-6’,200,‘三好學(xué)生’)
需要注意的是:
(1)輸入的順序和數(shù)據(jù)類型必須與表中列的順序和數(shù)據(jù)類型一致。
(2)可以不給全部列賦值,但沒有賦值的列必須是可以為空的列。
(3)字符型和日期型值插入時(shí)要用單引號(hào)擴(kuò)起來。
2)添加數(shù)據(jù)到一行中的部分列
要將數(shù)據(jù)添加到一行中的部分列時(shí),則需要同時(shí)給出要使用的列名以及要賦給這些列的數(shù)據(jù)。
【例8】insertintoxs(學(xué)號(hào),姓名,性別)values('0005','劉曉莉',1)4.2.5修改表中的記錄
1.在企業(yè)管理器中修改表中的記錄
(1)打開“企業(yè)管理器”并展開服務(wù)器,繼續(xù)展開“數(shù)據(jù)庫”,并展開要修改表的數(shù)據(jù)庫,例如是“學(xué)生表”。在“表”項(xiàng)上單擊鼠標(biāo),右邊會(huì)出現(xiàn)表對(duì)象,右擊要修改的表名,并選“設(shè)計(jì)表”命令。
(2)這時(shí)會(huì)出現(xiàn)創(chuàng)建表結(jié)構(gòu)時(shí)的窗口,然后對(duì)表結(jié)構(gòu)做修改就可以了,最后保存退出。
2.使用update語句修改表中的記錄
語法格式為:update表名set列名=更新后新的數(shù)據(jù)值[,…n][where條件]
【例9】updatexsset備注=‘優(yōu)秀黨員’where學(xué)號(hào)=‘0001’
【例10】updatexsset獎(jiǎng)學(xué)金=獎(jiǎng)學(xué)金+1000
【例11】updatexsset專業(yè)名='計(jì)算機(jī)',出生日期='10/20/1988',備注='班長(zhǎng)'where學(xué)號(hào)='0003'4.2.6刪除表中的記錄
1.在企業(yè)管理器中刪除表中的記錄
通過企業(yè)管理器刪除記錄和插入記錄的操作非常類似。在要?jiǎng)h除的記錄上右擊,在彈出菜單中選擇刪除命令就可以了。這時(shí)會(huì)出現(xiàn)一個(gè)警告信息對(duì)話框,詢問用戶是否確定要?jiǎng)h除該行記錄。選擇“是”,則數(shù)據(jù)會(huì)永久刪除,無法恢復(fù)。如果用戶同時(shí)刪除多條記錄,那么配合shift鍵就可以完成多條記錄的選擇。
2.使用delete語句刪除表中的記錄
語法格式為:deletefrom表名[where條件]
其中,表名是要?jiǎng)h除數(shù)據(jù)的表的名字。如果delete語句中沒有where子句限制,表中的所有記錄都將被刪除。
【例12】deletefromxswhere性別=0
【例13】deletexs/*清空表中所有記錄*/4.2.7刪除表
有時(shí)需要?jiǎng)h除表(如要實(shí)現(xiàn)新的設(shè)計(jì)或釋放數(shù)據(jù)庫的空間時(shí))。刪除表時(shí),表的結(jié)構(gòu)定義、數(shù)據(jù)、全文索引、約束和索引都永久地從數(shù)據(jù)庫中刪除,原來存放表及其索引的存儲(chǔ)空間可用來存放其他表。
表的刪除操作很簡(jiǎn)單,但要注意的是,如果與其他表存在關(guān)聯(lián)時(shí),則不能直接刪除表。要先刪除關(guān)聯(lián),然后再刪除表。圖4-13“除去對(duì)象”對(duì)話框圖4-14錯(cuò)誤信息
4.3視圖的基本操作
4.3.1視圖的概念
視圖是用于創(chuàng)建動(dòng)態(tài)表的靜態(tài)定義,視圖中的數(shù)據(jù)是根據(jù)預(yù)定義的選擇條件從一個(gè)或多個(gè)行集中生成的。用視圖可以定義一個(gè)或多個(gè)表的行列組合。為了得到所需要的行列組合的視圖,可以使用select語句來指定視圖中包含的行和列。視圖有很多優(yōu)點(diǎn),主要表現(xiàn)在以下幾點(diǎn)。
(1)視點(diǎn)集中。
(2)簡(jiǎn)化操作。
(3)定制數(shù)據(jù)。
(4)合并分割數(shù)據(jù)。
(5)安全性。4.3.2創(chuàng)建視圖
1.使用企業(yè)管理器創(chuàng)建視圖
使用企業(yè)管理器創(chuàng)建視圖應(yīng)注意以下4點(diǎn):
(1)只能在當(dāng)前的數(shù)據(jù)庫中創(chuàng)建視圖;
(2)視圖中最多只能引用1024列;
(3)如果視圖引用的表被刪除,則使用該視圖時(shí)將返回一條錯(cuò)誤提示信息;如果創(chuàng)建具有相同結(jié)構(gòu)的新表來代替已經(jīng)刪除的表,則可以繼續(xù)使用視圖,否則必須重新創(chuàng)建視圖;
(4)如果視圖中的某一列是函數(shù)、數(shù)學(xué)表達(dá)式常量或與來自多個(gè)表的列名相同,則必須為列定義名字。圖4-15視圖設(shè)計(jì)窗口圖圖4-16“添加表”對(duì)話框圖4-17在視圖設(shè)計(jì)窗口中創(chuàng)建視圖
2.使用Transact-SQL語言創(chuàng)建視圖
除了使用企業(yè)管理器創(chuàng)建視圖以外,還可以使用Transact-SQL語句中的CreateView命令創(chuàng)建視圖。創(chuàng)建視圖的語法格式如下:
createview[<數(shù)據(jù)庫名>.][<所有者>.]視圖名[(列名[,...n])]
[with{encryption|schemabinding|view_metadata}]
as
select查詢語句
[withcheckoption]
【例14】創(chuàng)建一個(gè)新視圖“視圖1”,要求基表選擇學(xué)生表和成績(jī)表,來源字段為學(xué)生表中學(xué)號(hào)、姓名和性別,成績(jī)表中成績(jī)。要求查詢所有女同學(xué)的成績(jī),程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
createview視圖1
as
select學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,學(xué)生表.性別,成績(jī)表.成績(jī)
from學(xué)生表,成績(jī)表
where學(xué)生表.學(xué)號(hào)=成績(jī)表.學(xué)號(hào)and學(xué)生表.性別='女'圖4-18查詢結(jié)果【例15】創(chuàng)建一個(gè)新視圖“視圖2”,要求基表選擇學(xué)生表和成績(jī)表,來源字段為學(xué)生表中學(xué)號(hào)、姓名,成績(jī)表中成績(jī)。要求查詢陳艷的成績(jī),并對(duì)視圖的定義進(jìn)行加密,程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
createview視圖2
withencryption
as
select學(xué)生表.學(xué)號(hào),學(xué)生表.姓名,成績(jī)表.成績(jī)
from學(xué)生表,成績(jī)表
where學(xué)生表.學(xué)號(hào)=成績(jī)表.學(xué)號(hào)and學(xué)生表.姓名='陳艷'圖4-19查詢結(jié)果圖4-20“錯(cuò)誤提示”對(duì)話框
【例16】創(chuàng)建一個(gè)新視圖“視圖3”,要求基表選擇成績(jī)表,來源字段為成績(jī)表中學(xué)號(hào)和成績(jī),要求計(jì)算每位同學(xué)的“成績(jī)總和”,并對(duì)視圖的定義進(jìn)行加密,程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
createview視圖3
withencryption
as
select成績(jī)表.學(xué)號(hào),
sum(成績(jī)表.成績(jī))
as成績(jī)總和
from成績(jī)表
groupby成績(jī)表.學(xué)號(hào)圖4-21查詢結(jié)果4.3.3修改視圖
1.使用企業(yè)管理器修改視圖
使用企業(yè)管理器修改視圖的步驟如下:
(1)在企業(yè)管理器中右擊要修改的視圖,在彈出的快捷菜單中選擇“設(shè)計(jì)視圖”命令,打開SQLServer的視圖設(shè)計(jì)窗口。
(2)在視圖設(shè)計(jì)窗口中按照在企業(yè)管理器中創(chuàng)建視圖的方法,對(duì)已經(jīng)創(chuàng)建好的視圖進(jìn)行修改。可以添加和刪除數(shù)據(jù)源,也可以在數(shù)據(jù)源列表窗格的復(fù)選框列表中增加或刪除在視圖中顯示的列,還可以修改列的排序類型和排序順序,修改查詢條件等。
2.使用Transact-SQL語言修改視圖
對(duì)于一個(gè)已經(jīng)創(chuàng)建好的視圖,可以使用alterview語句對(duì)其屬性進(jìn)行修改。alterview語句用于修改一個(gè)先前創(chuàng)建的視圖(用createview創(chuàng)建),包括索引視圖,但不影響相關(guān)的存儲(chǔ)過程或觸發(fā)器,也不更改權(quán)限。該語句的語法格式如下:
alterview[<數(shù)據(jù)庫名>.][<所有者>.]視圖名[(列名[,...n])]
[with{encryption|schemabinding|view_metadata}]
as
select查詢語句
[withcheckoption]
【例17】修改視圖2,在該視圖中增加一個(gè)新的限制條件,要求查詢陳艷大于70分的成績(jī),并對(duì)視圖2取消加密,程序?yàn)椋簣D4-22查詢結(jié)果4.3.4使用視圖查詢數(shù)據(jù)
使用視圖查詢基表中的數(shù)據(jù)可以使用企業(yè)管理器和Transact-SQL語句兩種方法。
1.使用企業(yè)管理器通過視圖查詢數(shù)據(jù)
使用企業(yè)管理器查詢基表中的數(shù)據(jù),操作步驟如下。
(1)在企業(yè)管理器的視圖對(duì)象中右擊視圖(例如視圖1),在彈出的快捷菜單中選擇“打開視圖”菜單下的“返回所有行”。
(2)可以在彈出的新窗口中查看滿足該視圖限制條件的基表中的數(shù)據(jù),如圖4-23所示。圖4-23視圖1中的數(shù)據(jù)
2.使用Transact-SQL語句
可以在查詢分析器中輸入Transact-SQL語句查詢視圖的基表中的數(shù)據(jù)。
【例18】查詢視圖1的基表中的數(shù)據(jù),程序?yàn)椋?/p>
select*from視圖14.3.5使用視圖管理數(shù)據(jù)表中的數(shù)據(jù)
1.插入數(shù)據(jù)
可以通過視圖向基表中插入數(shù)據(jù),但應(yīng)該注意的是:
插入的數(shù)據(jù)實(shí)際上存放在基表中,而不是存放在視圖中。視圖中的數(shù)據(jù)若發(fā)生變化,是因?yàn)橄鄳?yīng)的基表中的數(shù)據(jù)發(fā)生
變化。
【例19】創(chuàng)建一個(gè)視圖4,該視圖的基表為學(xué)生表,要求在視圖中顯示所有男同學(xué)的信息,程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
createview視圖4
as
select*
from學(xué)生表
where性別=‘男’
此時(shí)視圖中的數(shù)據(jù)如圖4-24所示。圖4-24的查詢結(jié)果此時(shí)如果通過視圖4向?qū)W生表中插入數(shù)據(jù),在查詢分析器中輸入下列Transact-SQL語句:
use學(xué)生成績(jī)管理
go
insertinto視圖4values(‘2013006’,‘張鍵’,‘男’,‘1991-10-20’,,‘群眾’)insertinto視圖4
values(‘2013007’,‘張蕭蕭’,‘女’,‘1992-03-20’,,‘黨員’)
輸入并執(zhí)行下面一段查詢語句,分別查看視圖4及其基表中數(shù)據(jù)的變化:
select*from視圖4
select*from學(xué)生表
代碼執(zhí)行后,結(jié)果窗口如圖4-25所示。圖4-25插入數(shù)據(jù)后的查詢結(jié)果
【例20】創(chuàng)建一個(gè)視圖5,該視圖的基表為學(xué)生表,要求在視圖中顯示團(tuán)員中所有男同學(xué)的信息,程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
createview視圖5
as
select*
from學(xué)生表
where性別=‘男’and備注=‘團(tuán)員’
withcheckoption
此時(shí)視圖5中的數(shù)據(jù)如圖4-26所示。圖4-26查詢結(jié)果此時(shí)如果通過視圖5向?qū)W生表中插入數(shù)據(jù),在查詢分析器中輸入下列Transact-SQL語句:
use學(xué)生成績(jī)管理
go
insertinto視圖5values(‘2013008’,‘張見軍’,‘男’,‘1989-01-20’,,‘團(tuán)員’)insertinto視圖5values(‘2013100’,‘張渙渙’,‘女’,‘1992-09-11’,,‘黨員’)
運(yùn)行之后在查詢分析器的結(jié)果顯示窗口中顯示提示信息如圖4-27所示。圖4-27“插入數(shù)據(jù)失敗”錯(cuò)誤提示框輸入并執(zhí)行下面一段查詢語句分別查看視圖5及其基表中數(shù)據(jù)的變化:
select*from視圖5
select*from學(xué)生表
代碼執(zhí)行后,視圖5和基表學(xué)生表中的數(shù)據(jù)分別如圖4-28和圖4-29所示。圖4-28插入數(shù)據(jù)后視圖5的變化圖4-29插入數(shù)據(jù)后基表學(xué)生表的變化
2.更新數(shù)據(jù)
使用update命令通過視圖更新數(shù)據(jù)時(shí),被更新的列必須位于同一個(gè)表中。
【例21】創(chuàng)建一個(gè)視圖6,該視圖的基表為課程表,在視圖中顯示課程表中學(xué)分為3的課程信息,程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
createview視圖6
as
select*
from課程表
where學(xué)分=3
視圖6中的數(shù)據(jù)如圖4-30所示。圖4-30視圖6中的數(shù)據(jù)如果要通過視圖6來更新課程表中的數(shù)據(jù),則在查詢分析器中輸入下列Transact-SQL語句:
use學(xué)生成績(jī)管理
go
update視圖6
set學(xué)分=5
where課程號(hào)?=?‘20002’
此時(shí)視圖6和基表課程表中的數(shù)據(jù)都發(fā)生了變化,課
程號(hào)為20002的課程學(xué)分修改為5。分別如圖4-31和圖4-32
所示。圖4-31更新數(shù)據(jù)后視圖6的變化圖4-32更新數(shù)據(jù)后基表課程表的變化
3.刪除數(shù)據(jù)
【例22】利用視圖5,刪除編號(hào)為1007的員工的記錄,程序?yàn)椋?/p>
use學(xué)生成績(jī)管理
go
deletefrom視圖5
where姓名?=?‘李勇’
執(zhí)行該段代碼后,視圖5和基表學(xué)生表中的數(shù)據(jù)分別如圖4-33和圖4-34所示。圖4-33刪除數(shù)據(jù)后視圖5的變化圖4-34刪除數(shù)據(jù)后基表學(xué)生表的變化
4.4索引的基本操作
4.4.1索引的概念
在SQLServer中,索引主要起到輔助查詢和組織數(shù)據(jù)的功能,通過使用它,可以大大地提高查詢數(shù)據(jù)的效率。索引類似目錄,使得查詢更快速、更高效,適用于訪問大型數(shù)據(jù)庫。在本章中,具體介紹索引的概念、索引的類型、使用企業(yè)管理器和Transact-SQL語句創(chuàng)建和管理索引的方法等。4.4.2索引的類型
1.聚集索引
聚集索引對(duì)表的物理數(shù)據(jù)頁中的數(shù)據(jù)按列進(jìn)行排序,然后再重新存儲(chǔ)到磁盤上,即聚集索引與數(shù)據(jù)是混為一體的,它的葉節(jié)點(diǎn)中存儲(chǔ)的是實(shí)際的數(shù)據(jù)。如果在一個(gè)表中建立了聚集索引,那么表中的數(shù)據(jù)頁會(huì)依照該索引的順序來存放。由于一個(gè)數(shù)據(jù)表只能有一種實(shí)際的存儲(chǔ)順序,所以在一個(gè)數(shù)據(jù)表中只能建立一個(gè)聚集索引。
2.非聚集索引
非聚集索引具有完全獨(dú)立于數(shù)據(jù)行的結(jié)構(gòu),使用非聚集索引不需要將物理數(shù)據(jù)頁中的數(shù)據(jù)按列重新排序。非聚集索引的頁面頂級(jí)存儲(chǔ)了組成非聚集索引的關(guān)鍵字值和行定位器,行定位器即指針將指向數(shù)據(jù)頁中的數(shù)據(jù)行,該行具有與索引值相同的列值,這樣就加快了檢索的速度。
3.唯一索引
無論是聚集索引還是非聚集索引,如果考慮到索引鍵值是否重復(fù),就可以判定是否為唯一索引;如果考慮索引字段的組成情況,又可以判斷是否為復(fù)合索引。4.4.3創(chuàng)建索引
在SQLServer中創(chuàng)建索引有下面幾種方法:
(1)利用企業(yè)管理器中的索引向?qū)?chuàng)建索引。
(2)利用企業(yè)管理器直接創(chuàng)建索引。
(3)利用Transact-SQL語句中的createindex命令創(chuàng)建索引。
(4)利用企業(yè)管理器中的索引優(yōu)化向?qū)?chuàng)建索引。
1.利用企業(yè)管理器中的索引向?qū)?chuàng)建索引
具體操作步驟如下:圖4-35選擇向?qū)Ы缑鎴D4-36索引向?qū)ч_始界面圖4-37選擇數(shù)據(jù)庫和表圖4-38當(dāng)前索引信息圖4-39選擇要?jiǎng)?chuàng)建索引的列圖4-40指定索引選項(xiàng)圖4-41完成創(chuàng)建索引界面圖圖4-42創(chuàng)建索引成功
2.利用企業(yè)管理器直接創(chuàng)建索引
在企業(yè)管理器中也可以直接對(duì)某個(gè)數(shù)據(jù)庫表格建立索引,其方法是:圖4-43企業(yè)管理器中直接創(chuàng)建索引圖4-44選擇數(shù)據(jù)庫和表圖4-45創(chuàng)建新的索引圖4-46索引管理
3.使用createindex命令創(chuàng)建索引
使用createindex語句來創(chuàng)建索引,是最基本、最具有適應(yīng)性的索引創(chuàng)建方式,可以創(chuàng)建出符合自己需要的索引。在使用這種方式創(chuàng)建索引時(shí),可以使用許多選項(xiàng),例如指定數(shù)據(jù)頁的充滿度、進(jìn)行排序、整理統(tǒng)計(jì)信息等,從而優(yōu)化索引。另外,使用這種方法,還可以指定索引類型、唯一性、包含性和復(fù)合性,也就是說,既可以創(chuàng)建聚集索引,也可以創(chuàng)建非聚集索引;既可以在一個(gè)列上創(chuàng)建索引,也可以在兩個(gè)或兩個(gè)以上的列上創(chuàng)建索引。在SQLServer2000系統(tǒng)中,使用createindex語句可以在關(guān)系表上創(chuàng)建索引,其基本的語法形式如下:
【例23】在學(xué)生成績(jī)管理數(shù)據(jù)庫中,給學(xué)生表的姓名創(chuàng)建降序的聚集索引,索引名為xm。
use學(xué)生成績(jī)管理
go
createclu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童玩偶租賃合同樣本
- 信息買賣合同樣本
- 2025中學(xué)實(shí)習(xí)教師合同
- 個(gè)人房屋 涂料合同樣本
- 傳媒公司交易合同樣本
- 公司房子抵押合同樣本
- 二手車 合同樣本
- 供貨渠道合同樣本
- 代理經(jīng)營(yíng)店鋪合同樣本
- 保險(xiǎn)信息服務(wù)合同標(biāo)準(zhǔn)文本
- 疫情統(tǒng)計(jì)學(xué)智慧樹知到答案2024年浙江大學(xué)
- 海上救援合同
- 2024年義務(wù)教育階段國(guó)家質(zhì)量監(jiān)測(cè)模擬測(cè)試
- 纏論-簡(jiǎn)單就是美
- 兒童神話故事-女媧補(bǔ)天
- 2024車輛掛靠證明
- DL∕T 2138-2020 電力專利價(jià)值評(píng)估規(guī)范
- JT-T-1039-2016公路橋梁聚氨酯填充式伸縮裝置
- 航空航天概論智慧樹知到期末考試答案章節(jié)答案2024年西安航空學(xué)院
- 人教版七年級(jí)下冊(cè)生物重點(diǎn)知識(shí)提綱(填空版)
- 2024年河南水利與環(huán)境職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫審定版
評(píng)論
0/150
提交評(píng)論