




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第6章 表的創(chuàng)建與管理6.1 數(shù)據(jù)類型 6.2 表的創(chuàng)建6.3 表構(gòu)造的修正6.4 表的重命名與刪除6.5 向表中添加、更新、刪除數(shù)據(jù)6.6 數(shù)據(jù)完好性的概念與實施方法上一章前往目錄.1.表的概念:表是數(shù)據(jù)庫的數(shù)據(jù)對象,用于存儲和操作數(shù)據(jù)的一種邏輯構(gòu)造,是一系列列的集合。2.表的構(gòu)成:表由表頭和假設(shè)干行數(shù)據(jù)構(gòu)成。3.表的特性:表中每一行代表一個獨一的記錄,每列代表一個域。教學(xué)過程:.例1:學(xué)生成果表表名表頭數(shù)據(jù)行列.4.對表的操作:填表:將數(shù)據(jù)寫入表中。修正:矯正表中的數(shù)據(jù)信息。刪除:刪除表中記錄信息。查詢:在表中按某些條件查找記錄信息。5.留意:在SQL Server2005中,每個數(shù)據(jù)庫最
2、多可存儲20億個表,每個表可以有1024列,每行最多可以存儲8060字節(jié)。SQL Server中表分為:永久表和暫時表。其中永久表在創(chuàng)建后,除非用戶刪除否那么將不斷存放在數(shù)據(jù)庫文件中;而暫時表那么會在用戶退出或進展系統(tǒng)修復(fù)時被自動刪除。.6.數(shù)據(jù)類型:1相關(guān)概念:概念:定義每個列所能存放的數(shù)據(jù)值和存儲格式。精度:指數(shù)值數(shù)據(jù)中所存儲的十進制數(shù)據(jù)的總位數(shù)。例如:tinyint類型可以表示范圍是0255,其精度為3。小數(shù)位數(shù):指數(shù)值數(shù)據(jù)中小數(shù)點右邊可以有的數(shù)字位數(shù)的最大值。例:89.658,其精度為5,小數(shù)位數(shù)為3。長度:存儲數(shù)據(jù)所用的字節(jié)數(shù)。例:tinyint所用長度為1字節(jié)。2種類:系統(tǒng)數(shù)據(jù)類型
3、和用戶自定義數(shù)據(jù)類型。SQL Server2005中列的數(shù)據(jù)類型既可以是系統(tǒng)數(shù)據(jù)類型也可以是用戶自定義數(shù)據(jù)類型。.6.1 數(shù)據(jù)類型 6.1.1 系統(tǒng)數(shù)據(jù)類型6.1.2 自定義數(shù)據(jù)類型 .6.1.1 系統(tǒng)數(shù)據(jù)類型 1. 整型數(shù)據(jù)類型2. 浮點數(shù)據(jù)類型 3. 字符數(shù)據(jù)類型 4. 日期和時間數(shù)據(jù)類型 5. 文本和圖形數(shù)據(jù)類型 6. 貨幣數(shù)據(jù)類型 7. 位數(shù)據(jù)類型 8. 二進制數(shù)據(jù)類型 9. 特殊數(shù)據(jù)類型 10. 新增數(shù)據(jù)類型.詳細種類:類型精度小數(shù)位數(shù)長度(字節(jié))范圍字符型char(n)N固定varchar(n) n為實際輸入字符數(shù)unicodeNchar(n)2N固定Nvarchar(n)2n為實
4、際輸入字符數(shù)文本型Text2311為實際輸入字符數(shù)(ASCII)Ntext2301為實際輸入字符數(shù)(Unicode).類型精度小數(shù)位數(shù)長度( 字節(jié))范圍整數(shù)型bigint19082632631Int1004231231-1smallint5022152151tinyint3010255精確數(shù)值型Decimal(p,s)ps5171038+110381Numeric(p,s)ps5171038+110381.類型精度小數(shù)位數(shù)長度( 字節(jié))范圍浮點型貨幣型Float(n)1581.79E3081.79E+308real743.40E+383.40E+38money19482632631smallm
5、oney10442312311位型圖像型bit10或1image02311.類型精度小數(shù)位數(shù)長度(字節(jié))范圍二進制型Binary(n)N+4固定Varbinary(n) 18000為實際輸入長度+4日期型datetime81753年1月1日到9999年12月31smalldatetime41900年1月1日到2079年12月31時間戳型timetamp8自動增長.1. 整型數(shù)據(jù)類型整型數(shù)據(jù)類型是最常用的數(shù)據(jù)類型之一,它主要用來存儲數(shù)值,可以直接進展數(shù)據(jù)運算,而不用運用函數(shù)轉(zhuǎn)換。 intinteger:int或integer數(shù)據(jù)類型可以存儲從-231-2,147,483,648到231-12,1
6、47,483,647范圍之間的一切正負整數(shù)。 Smallint:可以存儲從-215-32,768到215-1范圍之間的一切正負整數(shù) 。Tinyint:可以存儲從0到255范圍之間的一切正整數(shù)。 .2. 浮點數(shù)據(jù)類型 浮點數(shù)據(jù)類型用于存儲十進制小數(shù)。浮點數(shù)值的數(shù)據(jù)在SQL Server中采用只入不舍的方式進展存儲 。Real:可以存儲正的或者負的十進制數(shù)值,最大可以有7位準確位數(shù)。 Float:可以準確到第15位小數(shù),其范圍從-1.79E-308到1.79E+308。 Decimal和numeric:Decimal數(shù)據(jù)類型和numeric數(shù)據(jù)類型完全一樣,它們可以提供小數(shù)所需求的實踐存儲空間,但
7、也有一定的限制,可以用2到17個字節(jié)來存儲從-1038-1到1038-1之間的數(shù)值。 .3. 字符數(shù)據(jù)類型 字符數(shù)據(jù)類型可以用來存儲各種字母、數(shù)字符號和特殊符號。 Char:其定義方式為charn,每個字符和符號占用一個字節(jié)的存儲空間。 Varchar:其定義方式為varcharn。用char數(shù)據(jù)類型可以存儲長達255個字符的可變長度字符串 。Nchar:其定義方式為ncharn。 Nvarchar:其定義方式為nvarcharn。 .4. 日期和時間數(shù)據(jù)類型 Datetime:用于存儲日期和時間的結(jié)合體 。它可以存儲從公元1753年1月1日零時起到公元9999年12月31日23時59分59秒
8、之間的一切日期和時間 。Smalldatetime:與datetime數(shù)據(jù)類型類似,但其日期時間范圍較小,它存儲從1900年1月1日到2079年6月6日內(nèi)的日期。 .5. 文本和圖形數(shù)據(jù)類型 Text:用于存儲大量文本數(shù)據(jù),其容量實際上為1到231-12,147,483,647個字節(jié),但實踐運用時要根據(jù)硬盤的存儲空間而定。 Ntext:與text數(shù)據(jù)類型類似,存儲在其中的數(shù)據(jù)通常是直接能輸出到顯示設(shè)備上的字符,顯示設(shè)備可以是顯示器、窗口或者打印機。Image:用于存儲照片、目錄圖片或者圖畫,其實際容量為231-12,147,483,647個字節(jié)。.6. 貨幣數(shù)據(jù)類型 Money:用于存儲貨幣值
9、,存儲在money數(shù)據(jù)類型中的數(shù)值以一個正數(shù)部分和一個小數(shù)部分存儲在兩個4字節(jié)的整型值中,存儲范圍為-922337285477.5808到922337285477.5808,精度為貨幣單位的萬分之一。Smallmoney:與money數(shù)據(jù)類型類似,但其存儲的貨幣值范圍比money數(shù)據(jù)類型小,其存儲范圍為-214748.3468到214748.3467。.7. 位數(shù)據(jù)類型 Bit:稱為位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取值:0和1,長度為1字節(jié)。 .8. 二進制數(shù)據(jù)類型Binary:其定義方式為binary(n),數(shù)據(jù)的存儲長度是固定的,即n+4字節(jié),當(dāng)輸入的二進制數(shù)據(jù)長度小于n時,余下部分填充0。 Va
10、rbinary:其定義方式為varbinary(n),數(shù)據(jù)的存儲長度是變化的,它為實踐所輸入數(shù)據(jù)的長度加上4字節(jié)。其它含義同binary。.9. 特殊數(shù)據(jù)類型 Timestamp:亦稱時間戳數(shù)據(jù)類型,它提供數(shù)據(jù)庫范圍內(nèi)的獨一值,反響數(shù)據(jù)庫中數(shù)據(jù)修正的相對順序,相當(dāng)于一個單調(diào)上升的計數(shù)器。 Uniqueidentifier:用于存儲一個16字節(jié)長的二進制數(shù)據(jù)類型,它是SQL Server根據(jù)計算機網(wǎng)絡(luò)適配器地址和CPU時鐘產(chǎn)生的獨一號碼而生成的全局獨一標識符代碼Globally Unique Identifier,簡寫為GUID。.10. 新增數(shù)據(jù)類型 Bigint:用于存儲從-263-9,22
11、3,372,036,854,775,807到263-19,223,372,036,854,775,807之間的一切正負整數(shù)。 sql_variant:用于存儲除文本、圖形數(shù)據(jù)和timestamp類型數(shù)據(jù)外的其它任何合法的SQL Server數(shù)據(jù)。table:用于存儲對表或者視圖處置后的結(jié)果集。這種新的數(shù)據(jù)類型使得變量可以存儲一個表,從而使函數(shù)或過程前往查詢結(jié)果更加方便、快捷。.6.1.2 自定義數(shù)據(jù)類型 創(chuàng)建用戶定義類型要提供三個參數(shù):稱號、系統(tǒng)數(shù)據(jù)類型、能否允許為空。創(chuàng)建方法:1. 運用企業(yè)管理器Enterprise Manager創(chuàng)建用戶自定義數(shù)據(jù)類型。.刪除數(shù)據(jù)類型:.2. 利用系統(tǒng)存儲
12、過程創(chuàng)建用戶自定義數(shù)據(jù)類型 。系統(tǒng)存儲過程sp_addtype為用戶提供了T_SQL語句創(chuàng)建自定義數(shù)據(jù)類型的途徑,其語法方式如下:sp_addtype typename= type,phystype= system_data_type, nulltype= null_type, owner= owner_name.運用Tranact-SQL創(chuàng)建用戶定義數(shù)據(jù)類型:格式:sp_addtype 類型名, 系統(tǒng)數(shù)據(jù)類型 ,能否為空例:sp_addtype wx , int , not null運用Tranact-SQL刪除用戶定義數(shù)據(jù)類型:格式:sp_droptype 類型名 例:sp_addtype
13、 wx.例子6-1:自定義一個地址數(shù)據(jù)類型。 exec sp_addtype address, varchar(80), not null其運轉(zhuǎn)結(jié)果如下:1 row(s) affectedtype added.例子6-2:刪除自定義的生日數(shù)據(jù)類型。 exec sp_droptype birthday其運轉(zhuǎn)結(jié)果如下:1 row(s) affected0 row(s) affectedType has been dropped.例:在XK數(shù)據(jù)庫中創(chuàng)建一個名為TEL(號碼)的用戶自定義數(shù)據(jù)類型,定義為VARCHAR數(shù)據(jù)類型,長度為3,且不能為NULLUSE XkGOEXEC sp_addtype ,
14、VARCHAR(30),NOT NULLGO.例:刪除剛建立的用戶自定義數(shù)據(jù)類型USE XkGOEXEC sp_droptype GO.6.2 表的創(chuàng)建在SQL Server 2005中,每個數(shù)據(jù)庫中最多可以創(chuàng)建200萬個表,用戶創(chuàng)建數(shù)據(jù)庫表時,最多可以定義1024列,也就是可以定義1024個字段。 SQL Server 2005提供了兩種方法創(chuàng)建數(shù)據(jù)庫表,第一種方法是利用企業(yè)管理器Enterprise Manager創(chuàng)建表;另一種方法是利用Transact-SQL語句中的create命令創(chuàng)建表。.1. 利用Enterprise Manager創(chuàng)建表 在Enterprise Manager中,
15、展開指定的效力器和數(shù)據(jù)庫,翻開想要創(chuàng)建新表的數(shù)據(jù)庫,用右鍵單擊表對象,從彈出的快捷菜單中選擇新建表選項,或者在工具欄中選擇圖標,就會出現(xiàn)新建表對話框,在該對話框中,可以定義列的以下屬性:列稱號、數(shù)據(jù)類型、長度、精度、小數(shù)位數(shù)、能否允許為空、缺省值、標識列、標識列的初始值、標識列的增量值和能否有行的標識。 然后根據(jù)提示進展設(shè)置。.2. 利用create命令創(chuàng)建表 其語法方式如下:CREATE TABLE database_name. owner .| owner. table_name( | column_name AS computed_column_expression| ,n) ON fi
16、legroup | DEFAULT .創(chuàng)建表的各參數(shù)的闡明如下: database_name:用于指定在其中創(chuàng)建表的數(shù)據(jù)庫稱號。 owner:用于指定新建表的一切者的用戶名 。table_name:用于指定新建的表的稱號。 column_name:用于指定新建表的列的稱號。 computed_column_expression:用于指定計算列的列值的表達式。 ON filegroup | DEFAULT:用于指定存儲表的文件組名。 TEXTIMAGE_ON:用于指定 text、ntext 和 image 列的數(shù)據(jù)存儲的文件組。 data_type:用于指定列的數(shù)據(jù)類型 。DEFAULT:用于指
17、定列的缺省值。 .constant_expression:用于指定列的缺省值的常量表達式 。IDENTITY:用于指定列為標識列。 Seed:用于指定標識列的初始值。Increment:用于指定標識列的增量值。 NOT FOR REPLICATION:用于指定列的IDENTITY屬性在把從其它表中復(fù)制的數(shù)據(jù)插入到表中時不發(fā)生作用,即缺乏的生成列值,使得復(fù)制的數(shù)據(jù)行堅持原來的列值。ROWGUIDCOL:用于指定列為全球獨一鑒別行號列 。COLLATE:用于指定表運用的校驗方式。 column_constraint和table_constraint:用于指定列約束和表約束。 .例子6-3:創(chuàng)建了一
18、個雇員信息表 其SQL語句的程序清單如下: CREATE TABLE employee ( number int not null, name varchar(20) NOT NULL, sex char(2) NULL, birthday datetime null, hire_date datetime NOT NULL DEFAULT (getdate(), professional_title varchar(10) null, salary money null, memo ntext null).例子6-4USE XkGO-創(chuàng)建班級信息表ClassCREATE TABLE Clas
19、s( ClassNo char (8) NOT NULL, DepartNo char (2) NOT NULL, ClassName char (20) NOT NULL )GO.-創(chuàng)建學(xué)生信息表StudentCREATE TABLE Student( StuNo char (8) NOT NULL, ClassNo char (8) NOT NULL, StuName char (8) NOT NULL, Pwd char (8) NOT NULL)GO.-創(chuàng)建學(xué)生選課表StuCouCREATE TABLE StuCou( StuNo char (8) NOT NULL , CouNo c
20、har (3) NOT NULL , WillOrder smallint NOT NULL , State char (4) NOT NULL , RandomNum varchar (50) NULL )GO.6.3 表構(gòu)造的修正6.3.1 運用T-SQL的ALTER TABLE 語句修正表 ALTER TABLE database_name . owner.table_name WITH NOCHECK ADD column_name datatype column_constraints | , table_constraint , next_col_name | next_table
21、_constraint | DROP CONSTRAINT constraint_name| COLUMN column,n .其中:l database_name:將要修正的表所在的數(shù)據(jù)庫。 owner:表對象的一切者。 table_name:將要修正的表的稱號。 WITH NOCHECK:允許check或者foreign key約束加到一個表,而不驗證現(xiàn)有的數(shù)據(jù)能否違反約束。假設(shè)沒有指定這個選項,添加的任何約束都要對現(xiàn)有數(shù)據(jù)進展檢查,假設(shè)有任何約束違反,ALTER TABLE語句將被終止。 ADD:在現(xiàn)有表中添加一個新的數(shù)據(jù)項或一個約束。 column_name:添加的字段稱號。 data
22、type:新增字段的數(shù)據(jù)類型。 DROP:刪除現(xiàn)有表中的一個字段或約束。 CONSTRAINT:刪除數(shù)據(jù)庫中的約束。 COLUMN:指定刪除數(shù)據(jù)庫中的列。.例子6-5:創(chuàng)建了一個雇員信息表 其SQL語句的程序清單如下:create table employees(id char(8) primary keyname char(20) not null,department char(20) null,memo char(30) nullage int null,)alter table employees add salary int null drop column agealter col
23、umn memo varchar(200) null.例子6-6 為XK數(shù)據(jù)庫中的CLASS表創(chuàng)建基于CLASSNO,列名為PK_CLASS的主鍵,再將其刪除USE XkGO-添加主鍵約束ALTER TABLE ClassADD CONSTRAINT PK_ClassPRIMARY KEY CLUSTERED (ClassNo) GO-刪除主鍵約束ALTER TABLE ClassDROP CONSTRAINT PK_ClassGO.6.3.2 運用SQL Server 企業(yè)管理器修正表 利用企業(yè)管理器添加、刪除和修正字段 。在企業(yè)管理器中,翻開指定的效力器中要修正表的數(shù)據(jù)庫,用右鍵單擊要進展
24、修正的表,從彈出的快捷菜單中選擇設(shè)計表選項,那么會出現(xiàn)設(shè)計表對話框,在該對話框中,可以利用圖形化工具完成添加、刪除和修正字段的操作。.例子6-7 修正XK數(shù)據(jù)庫中的表STUDENT將STUNO設(shè)置為主鍵.6.4 表的重命名與刪除重命名:1.運用T-SQL言語進展例:USE XkGoEXEC sp_rename Depart, DepartmentGO2.運用企業(yè)管理器.刪除表1. 利用企業(yè)管理器刪除表在企業(yè)管理器中,展開指定的數(shù)據(jù)庫和表格項,用右鍵單擊要刪除的表,從快捷菜單中選擇“除去表選項,那么會出現(xiàn)除去對象對話框。單擊“全部刪除按鈕,即可刪除表。 2. 利用DROP TABLE語句刪除表D
25、ROP TABLE語句可以刪除一個表和表中的數(shù)據(jù)及其與表有關(guān)的一切索引、觸發(fā)器、約束、答應(yīng)對象。DROP TABLE語句的語法方式如下:DROP TABLE table_name.例子6-8 刪除數(shù)據(jù)庫XK中的表CLASSUSE XkGoDROP TABLE ClassGO.6.5 表的數(shù)據(jù)操作 6.5.1 向表中插入數(shù)據(jù)在企業(yè)管理器中向表中插入數(shù)據(jù) 用INSERT語句向表中插入數(shù)據(jù) INSERT INTO table_name WITH ( .n )| view_name| rowset_function_limited ( column_list ) VALUES( DEFAULT | N
26、ULL | expression ,.n ) | derived_table| execute_statement .其中:l INTO:一個可選的關(guān)鍵字,可以將它用在 INSERT 和目的表之間。l table_name:將要接納數(shù)據(jù)的表或 table 變量的稱號。l WITH ( .n):指定目的表所允許的一個或多個表提示。需求有 WITH 關(guān)鍵字和圓括號。不允許有 READPAST、NOLOCK 和 READUNCOMMITTED。l view_name:視圖的稱號及可選的別名。經(jīng)過 view_name 來援用的視圖必需是可更新的。由 INSERT 語句所做的修正不能影響視圖的 FROM
27、 子句中援用的多個基表。例如,在多表視圖中的 INSERT 必需運用 column_list,column_list 是指援用來自一個基表的列。l rowset_function_limited:是 OPENQUERY 或 OPENROWSET 函數(shù)。l column_list:要在其中插入數(shù)據(jù)的一列或多列的列表。必需用圓括號將 column_list 括起來,并且用逗號進展分隔。.lVALUES:引入要插入的數(shù)據(jù)值的列表。對于 column_list假設(shè)已指定中或者表中的每個列,都必需有一個數(shù)據(jù)值。必需用圓括號將值列表括起來。假設(shè) VALUES 列表中的值與表中列的順序不一樣,或者未包含表中
28、一切列的值,那么必需運用 column_list 明確地指定存儲每個傳入值的列。l DEFAULT:強迫 SQL Server 裝載為列定義的默許值。假設(shè)對于某列并不存在默許值,并且該列允許 NULL,那么就插入 NULL。對于運用 timestamp 數(shù)據(jù)類型定義的列,插入下一個時間戳值。DEFAULT 對標識列無效。l Expression:一個常量、變量或表達式。表達式不能包含 SELECT 或 EXECUTE 語句。l derived_table:任何有效的 SELECT 語句,它前往將裝載到表中的數(shù)據(jù)行。lexecute_statement:任何有效的 EXECUTE 語句,它運用
29、SELECT 或 READTEXT 語句前往數(shù)據(jù)。.6.5.2 修正表中數(shù)據(jù) 在企業(yè)管理器中修正表數(shù)據(jù) 用UPDATE語句修正表數(shù)據(jù) UPDATE table_name WITH ( .n )SET column_name = expression | DEFAULT | NULL WHERE .其中:l table_name:需求更新的表的稱號。假設(shè)該表不在當(dāng)前效力器或數(shù)據(jù)庫中,或不為當(dāng)前用戶一切,這個稱號可用鏈接效力器、數(shù)據(jù)庫和一切者稱號來限定。l WITH ( .n ):指定目的表所允許的一個或多個表提示,需求有 WITH 關(guān)鍵字和圓括號。l SET:指定要更新的列或變量稱號的列表。l
30、column_name:含有要更改數(shù)據(jù)的列的稱號。column_name 必需駐留于 UPDATE 子句中所指定的表或視圖中。標識列不能進展更新。 l expression:變量、字面值、表達式或加上括弧的前往單個值的 subSELECT 語句。l DEFAULT:指定運用對列定義的默許值交換列中的現(xiàn)有值。假設(shè)該列沒有默許值并且定義為允許空值,這也可用來將列更改為 NULL。l WHERE:指定條件來限定所更新的行。.6.5.3 刪除表中數(shù)據(jù) 在企業(yè)管理器中刪除表中數(shù)據(jù) 用DELETE語句刪除表中數(shù)據(jù) DELETE FROM table_name WITH ( .n ) | view_name
31、| rowset_function_limited FROM ,.n WHERE .其中:l FROM:是可選的關(guān)鍵字,可用在 DELETE 關(guān)鍵字與目的 table_name、view_name 或 rowset_function_limited 之間。l table_name:是要從其中刪除行的表的稱號。在其作用域內(nèi)的 table 變量、或是將 OPENDATASOURCE 函數(shù)作為效力器稱號的由四部分組成的表名或視圖稱號還可以在 DELETE 語句中作為表源運用。l WITH ( .n):指定目的表所允許的一個或多個表提示。需求有 WITH 關(guān)鍵字和圓括號。不允許有 READPAST、N
32、OLOCK 和 READUNCOMMITTED。l view_name:是視圖稱號。在視圖的 FROM 子句中,view_name 援用的視圖必需可更新且正確援用一個基表。l FROM :指定附加的 FROM 子句。這個對 DELETE 的 Transact-SQL 擴展運用戶得以從 指定數(shù)據(jù),并從第一個 FROM 子句內(nèi)的表中刪除相應(yīng)的行。l WHERE:指定用于限制刪除行的條件。假設(shè)沒有提供 WHERE 子句,那么 DELETE 刪除表中的一切行。.6.6數(shù)據(jù)完好性的概念與實施方法數(shù)據(jù)庫運用程序開發(fā)中的一個重要步驟就是設(shè)計和實施數(shù)據(jù)的完好性,并確定實施數(shù)據(jù)完好性的最正確方案。數(shù)據(jù)完好性是指
33、數(shù)據(jù)庫中數(shù)據(jù)的正確性和一致性,是衡量數(shù)據(jù)庫質(zhì)量的一個重要規(guī)范。在運用INSERT、UPDATE和DELETE命令修正數(shù)據(jù)庫中的數(shù)據(jù)時,數(shù)據(jù)的完好性能夠被破壞,如插入了一個不存在學(xué)生的成果,或?qū)W(xué)生的班號修正為一個不存在的班級等。經(jīng)過定義數(shù)據(jù)完好性規(guī)那么,SQL Server可以經(jīng)過本身提供的完好性規(guī)那么有效地管理數(shù)據(jù)的輸入,而不用運用額外的運用程序來協(xié)助管理,這樣一方面可以節(jié)省系統(tǒng)開銷,另一方面將使數(shù)據(jù)庫中的數(shù)據(jù)獨立于運用程序,使創(chuàng)建開放式數(shù)據(jù)庫系統(tǒng)成為能夠。 .實現(xiàn)數(shù)據(jù)完好性與業(yè)務(wù)規(guī)那么數(shù)據(jù)完好性的落實可為數(shù)據(jù)庫中的數(shù)據(jù)質(zhì)量提供保證。在對數(shù)據(jù)表進展規(guī)劃時的兩個重要步驟就是對數(shù)據(jù)列的有效數(shù)值加
34、以識別,并決議如何落實列內(nèi)數(shù)據(jù)的完好性。數(shù)據(jù)完好性分為四種類型,并可經(jīng)過多種方式得到落實。.1.域完好性域完好性是指給定列的輸入有效性。強迫域有效性的方法有:經(jīng)過限制數(shù)據(jù)類型(包括自定義數(shù)據(jù)類型)、格式CHECK約束和規(guī)那么或能夠的取值范圍FOREIGN KEY約束、CHECK約束、DEFAULT定義、NOT NULL定義和規(guī)那么來實現(xiàn)。如:性別字段只能取“男或“女;課程成果取值范圍為0100;姓名字段不能為空;性別字段的默許值為“男等等。.2.實體完好性實體完好性是指表中的每一行必需是獨一的。實體完好性強迫表中的一切記錄都有一個獨一的標識列,這個獨一標識列能夠是一列,也能夠有假設(shè)干列的組合。
35、強迫實體完好性的方法有:UNIQUE約束、PRIMARY KEY約束或IDENTITY屬性。如:在學(xué)生情況表中,學(xué)生的學(xué)號是獨一的,它與每個學(xué)生一一對應(yīng);成果表中,學(xué)號+課程號是獨一的,它與每個學(xué)生的每門課相對應(yīng)。 .對于實體完好性,有如下規(guī)那么: 實體完好性規(guī)那么針對根本關(guān)系。一個根本關(guān)系表通常對應(yīng)一個實體集,例如,學(xué)生關(guān)系對應(yīng)學(xué)生集合。 現(xiàn)實世界中的實體是可以區(qū)分的,它們具有一種獨一性質(zhì)的標識。例如,學(xué)生的學(xué)號,教師的職工號等。在關(guān)系模型中,主關(guān)鍵字作為獨一的標識,且不能為空。 .3.參照完好性援用完好性參照完好性確保數(shù)據(jù)庫中數(shù)據(jù)的一致性。在SQL Server中,參照完好性基于外鍵援用表
36、與主鍵被援用表之間或外鍵與獨一鍵之間的關(guān)系經(jīng)過FOREIGN KEY和 CHECK約束。經(jīng)過外鍵將援用表和被援用表關(guān)聯(lián)起來。參照完好性經(jīng)過已定義的表間關(guān)系,確保鍵值在一切表中都必需一致,因此不能援用不存在的值即指向不存在的行。假設(shè)在被援用的表中,某一記錄被外部鍵援用,那么該記錄就不能刪除;假設(shè)需求更改鍵值,那么在整個數(shù)據(jù)庫中,對該鍵值的一切援用都要進展一致的更改,以保證數(shù)據(jù)的參照完好性。 .建立外鍵約束.用來控制數(shù)據(jù)庫相關(guān)表之間的主關(guān)鍵字和外部關(guān)鍵字之間數(shù)據(jù)一致性的規(guī)那么。相關(guān)表之間的數(shù)據(jù)一致性要求: 有子必有父 子表中的每一個記錄在對應(yīng)的主表中必需有一父記錄。插子必有父 在父表中修正記錄時,
37、假設(shè)修正了主關(guān)鍵字的值,那么子表中相關(guān)記錄的外部關(guān)鍵字值必需同樣修正 父刪子必刪 在父表中刪除記錄時,與該記錄相關(guān)的子表中的記錄必需全部刪除。注:參照完好性是建立在庫表之間永久關(guān)系根底之上的。 .4.用戶定義完好性用戶可以根據(jù)需求,可以在SQL Server中定義不屬于上述規(guī)范類別的特定規(guī)那么的用戶完好性定義。一切的完好性類型都支持用戶自定義完好性CREATE TABLE中的一切列級和表級約束、存儲過程和觸發(fā)器。.6.5.2 數(shù)據(jù)完好性實施方法目前有許多關(guān)系的DBMS提供了多種定義完好性約束條件的功能和檢查能否違背完好性約束條件的方法。DBMS假設(shè)發(fā)現(xiàn)了用戶的操作使數(shù)據(jù)庫違背了完好性約束條件,
38、將采取一定的措施,回絕用戶執(zhí)行此操作。約束分為列級約束和表級約束。假設(shè)約束只對一列起作用,應(yīng)定義為列級約束;假設(shè)約束對多列起作用,應(yīng)定義為表級約束。 .常用的關(guān)系數(shù)據(jù)庫實現(xiàn)完好性約束的方法有:1聲明型數(shù)據(jù)完好性。作為數(shù)據(jù)庫定義或闡明的一部分在語法中實現(xiàn),是SQL言語的參飾,在Create Table和Alter Table定義中運用constraint和default語句限制表中數(shù)據(jù)的值。 運用這種方法實現(xiàn)數(shù)據(jù)完好性簡單且不容易出錯,系統(tǒng)將直接實現(xiàn)數(shù)據(jù)完好性的要求定義在表和列上。 .在運用create table和alter table語句中,進展完好性限定的子句有:缺省約束default c
39、onstraints: 當(dāng)向數(shù)據(jù)庫中的表中插入數(shù)據(jù)時,假設(shè)用戶沒有明確給出某列的值,那么系統(tǒng)自動為該字段輸入指定的值。檢查約束check constraints:限制插入列中的值, 如性別字段輸入時只允許出現(xiàn)男或女,其他值一概不許出現(xiàn)。主鍵約束primary key constraints: 要求表中在指定的列上沒有兩行具有一樣的值,且不允許為空值。獨一約束unique constraints:要求表中在指定的列上沒有兩行具有一樣的值,允許為空值。參照約束reference constraints外鍵約束foreign key constraints:要求指定列或者外鍵中正被插入或者更新的新值
40、, 必需在主表的相應(yīng)主鍵中曾經(jīng)存在。.(2) 過程型數(shù)據(jù)完好性普通先寫出實施數(shù)據(jù)完好性的條件,然后再寫出強迫該條件所執(zhí)行的用于保證數(shù)據(jù)完好性的腳本。通常由觸發(fā)器和存儲過程實現(xiàn).6.6.3 約束 建立和運用約束的目的在于保證數(shù)據(jù)的完好性,設(shè)計表時需求定義列的有效值并經(jīng)過列中數(shù)據(jù)、行中數(shù)據(jù)及表間數(shù)據(jù)決議如何強迫保證數(shù)據(jù)的完好性,約束定義關(guān)于列中允許值的規(guī)那么,是強迫完好性的首選方法。 約束是獨立于表構(gòu)造的,它作為數(shù)據(jù)庫定義的一部分在創(chuàng)建表時聲明,可以經(jīng)過企業(yè)管理器或ALTER TABLE語句添加或刪除。當(dāng)表被刪除時,表所附帶的一切約束同時被刪除。.1 約束的類型在SQL Server 2005中有
41、5種約束:主鍵約束primary key constraint獨一性約束unique constraint檢查約束check constraint缺省約束default constraint外部鍵約束foreign key constraint.NOT NULL約束NOT NULL約束又稱非空約束,表示運用該約束的列不允許運用空值。假設(shè)該列是主鍵,那么系統(tǒng)強迫主鍵列為非空約束,而其它列的非空約束必需根據(jù)需求加以設(shè)置。非空約束可以在CREATE TABLE建表時實現(xiàn),在表創(chuàng)建完成后,也可以運用修正列屬性的T-SQL語句完成:ALTER TABLE table_nameALTER COLUMN c
42、olumn_namenew_data_type NULL | NOT NULL 【例5-1】 將學(xué)生信息表Student中的學(xué)生姓名列強迫非空約束。可以經(jīng)過修正列屬性的方法完成:ALTER TABLE StudentALTER COLUMN StudentName VARCHAR(10) NOT NULL.2、運用T-SQL言語創(chuàng)建、管理約束(1).運用CREATE TABLE語句創(chuàng)建約束的普通語法CREATE TABLE table_name(column_name data_type CONSTRAINT constraint_namePRIMARY KEYCLUSTERED|NONCLU
43、STERED|UNIQUECLUSTERED|NONCLUSTERED|FOREIGN KEY REFERENCES ref_table(ref_column)|DEFAULT constraint_expression|CHECK(logical_expression),).(2). 缺省約束當(dāng)表中的某列必需有值,并且當(dāng)運用INSERT命令向數(shù)據(jù)表插入記錄數(shù)據(jù)時,假設(shè)用戶沒有明確指定該列的值,該列也需求有一個明確值的情況下,就需求運用DEFAULT約束。運用了DEFAULT約束的列,SQL Server將根據(jù)用戶的插入數(shù)據(jù),自動維護域完好性:當(dāng)用戶插入時該列有指定值,那么該列運用該值插入,否
44、那么運用DEFAULT約束中指定的默許值。DEFAULT約束可以運用以下方法實現(xiàn):l作為表定義的一部分在創(chuàng)建表時創(chuàng)建。l添加到現(xiàn)有表中;l刪除現(xiàn)有的 DEFAULT 定義。ALTER TABLE Student/* 添加DEFAULT約束 */ ADD CONSTRAINT Default_Sex DEFAULT 男 FOR Sex.運用缺省約束時,應(yīng)該留意以下幾點:每個字段只能定義一個缺省約束。假設(shè)定義的缺省值長于其對應(yīng)字段的允許長度,那么輸入到表中的缺省值將被截斷。不能參與到帶有IDENTITY屬性或者數(shù)據(jù)類型為timestamp的字段上。假設(shè)字段定義為用戶定義的數(shù)據(jù)類型,而且有一個缺省綁
45、定到這個數(shù)據(jù)類型上,那么不允許該字段有缺省約束。.例 為數(shù)據(jù)庫JWGL中表teacher的SEX性別字段創(chuàng)建一個缺省約束,缺省值為1男USE JWGLGOALTER TABLE teacherADD CONSTRAINT default_sex DEFAULT 1 FOR SEX.【例】在XK數(shù)據(jù)庫中為StuCOU表創(chuàng)建名為DF_ StuCOU_State的DEFAULT約束,該約束使State列的值默以為報名USE XkGOALTER TABLE StuCouADD CONSTRAINT DF_StuCou_State DEFAULT (報名) FOR StateGO.【例】刪除剛建立的名為
46、StuCOU_State的DEFAULT約束USE XkGOALTER TABLE StuCouDROP CONSTRAINT DF_StuCou_StateGO.(3) 檢查約束 CHECK約束用于限制輸入到列中的值的范圍,從而強迫數(shù)據(jù)庫中數(shù)據(jù)的域完好性。它與FOREIGN KEY約束控制列中數(shù)值類似。區(qū)別在于它們判別值有效的方法不同:FOREIGN KEY約束從另一個表中獲得有效數(shù)值列表,而CHECK約束經(jīng)過邏輯表達式的成立與否加以判別。.一個列級檢查約束只能與限制的字段有關(guān);一個表級檢查約束只能與限制的表中字段有關(guān)。一個表中可以定義多個檢查約束。每個CREATE TABLE語句中每個字段
47、只能定義一個檢查約束。在多個字段上定義檢查約束,那么必需將檢查約束定義為表級約束。當(dāng)執(zhí)行INSERT語句或者UPDATE語句時,檢查約束將驗證數(shù)據(jù)。檢查約束中不能包含子查詢。.創(chuàng)建檢查約束常用的操作方法有兩種:1.企業(yè)管理器操作法。運用企業(yè)管理器創(chuàng)建檢查約束,與創(chuàng)建獨一性約束類似 。2.Transact-SQL語句操作法。檢查約束的Transact-SQL語句操作法,其語法方式如下:CONSTRAINT constraint_name CHECK NOT FOR REPLICATION (logical_expression).【例】 為數(shù)據(jù)庫JWGL中表student_course 的GRA
48、DE成果字段創(chuàng)建一個檢查約束,使得GRADE的值在0-100之間。USE JWGLGOALTER TABLE student_courseADD CONSTRAINT check_grade CHECK (grade=0 and grade=1 AND WillOrder=5)GO.(4) 主鍵約束 在一個表中,存在著這樣的字段,它在每個記錄中的值都是獨一的,因此可以用來標識表中的各個不同記錄。這樣的字段被稱為關(guān)鍵字,關(guān)鍵字可以是列或列的組合。例如學(xué)生情況表中的StudentID列就是一個關(guān)鍵字,由于每個學(xué)生的學(xué)號必需是獨一的。 當(dāng)表中有兩個或兩個以上的列或列的組合滿足以上條件時,稱這些列或列
49、的組合為候選關(guān)鍵字。 當(dāng)表的關(guān)鍵字多于一個時,可以將其中的一個關(guān)鍵字作為主鍵(PRIMARY KEY)。 .主鍵的添加、刪除和修正操作方法有兩種:一企業(yè)管理器操作法,在企業(yè)管理器中,用右鍵單擊要操作的數(shù)據(jù)庫表,從彈出的快捷菜單中選擇設(shè)計表選項 ,然后根據(jù)提示操作。二Transact-SQL語句操作法。 其語法方式如下:CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED column_name,n.主鍵約束各參數(shù)的闡明如下 constraint_name:用于指定約束的稱號,約束的稱號在數(shù)據(jù)庫中應(yīng)該是獨一的。假設(shè)不指定,那么
50、系統(tǒng)會自動生成一個約束名。LUSTERED|NONCLUSTERED:用于指定索引的類型,即聚簇索引或者非聚簇索引,CLUSTERED為默許值。column_name:用于指定主鍵的列名。主鍵最多由16個列組成。.【例】 將數(shù)據(jù)庫JWGL中teacher表的teacher_id教師號字段設(shè)為主鍵。 USE JWGLGOALTER TABLE teacher ADD CONSTRAINT PK_teacher_id PRIMARY KEY clustered (teacher_id).【例】在XK數(shù)據(jù)庫中為STUCOU表中的StuNo和CouNo列的組合創(chuàng)建名為IX_StuNoCouNo的PRI
51、MARY KEY約束USE XkGOALTER TABLE StuCouADD CONSTRAINT IX_StuNoCouNo PRIMARY KEY (StuNo,CouNo)GO.【例】刪除剛建立的名為IX_StuNoCouNo的PRIMARY KEY約束USE XkGOALTER TABLE StuCouDROP CONSTRAINT IX_StuNoCouNoGO.(5) 獨一性約束獨一性約束用于指定一個或者多個列的組合的值具有獨一性,以防止在列中輸入反復(fù)的值。當(dāng)運用獨一性約束時,需求思索以下幾個要素: 運用獨一性約束的字段允許為空值。一個表中可以允許有多個獨一性約束。可以把獨一性約
52、束定義在多個字段上。獨一性約束用于強迫在指定字段上創(chuàng)建一個獨一性索引。 缺省情況下,創(chuàng)建的索引類型為非聚簇索引。.創(chuàng)建和修正獨一性約束的操作方法創(chuàng)建和修正獨一性約束的操作方法有兩種:一企業(yè)管理器操作法,經(jīng)過企業(yè)管理器可以完成創(chuàng)建和修正獨一性約束的操作。 二Transact-SQL語句操作法。CONSTRAINT constraint_name UNIQUE CLUSTERED|NONCLUSTEREDcolumn_name,n.【例】 將數(shù)據(jù)庫JWGL中teacher表的teacher_id教師號字段設(shè)為獨一約束。 USE JWGLGOALTER TABLE department ADD CO
53、NSTRAINT unique_department_name UNIQUE nonclustered (department_name).【例】在XK數(shù)據(jù)庫中為Student表上創(chuàng)建名為IX_PWD的、獨一索引,該索引基于密碼PWD列,以保證學(xué)生密碼不反復(fù)。USE XkGOCREATE UNIQUE INDEX IX_Pwd ON Student (Pwd)GO.【例】 為系情況表(Department)中的系名列(DepartmentName添加一個UNIQUE約束。ALTER TABLE Department ADD CONSTRAINT UNIQUE_DepartmentName UN
54、IQUE (DepartmentName );.獨一約束和主鍵約束的區(qū)別獨一約束與主鍵約束都為指定的列建立獨一索引,即不允許獨一索引的列上有一樣的值。主鍵約束限制更嚴厲,不但不允許有反復(fù)值,而且也不允許有空值。 獨一約束與主鍵約束產(chǎn)生的索引可以是聚簇索引也可以是非聚簇索引,但在缺省情況下獨一約束產(chǎn)生非聚簇索引,主鍵約束產(chǎn)生聚簇索引。.(6) 外部鍵約束假設(shè)列或列的組合不是本表的關(guān)鍵字,而是另一個表的關(guān)鍵字,那么稱這些列或列的組合是外鍵(FOREIGN KEY)。普通表與表之間經(jīng)過主鍵和外鍵進展銜接,經(jīng)過它可以強迫表與表之間的參照完好性。FOREIGN KEY約束要求列中的每個值在被援用表中對應(yīng)
55、的被援用列中都存在。如學(xué)生情況表(Student)表中的所在班級(ClassID)就是一個外鍵,它與班級情況表(Class)表中的主鍵班號(ClassID)進展關(guān)聯(lián)。 .經(jīng)過外鍵約束強迫參照完好性。SQL Server提供了外鍵/主鍵值約束。即滿足以下兩點: 存在外鍵時,被參照表中這一行不能刪除。 向子表插入記錄或更新子表中外鍵值的前提是,必需保證這個外鍵值與主表中主鍵的某個值相等或者該外鍵值為空,否那么不允許插入或修正外鍵值。.創(chuàng)建FOREIGN KEY約束時應(yīng)思索以下要素:它提供一列或多列數(shù)據(jù)的參照完好性。FOREIGN KEY約束不自動創(chuàng)建索引。但假設(shè)思索數(shù)據(jù)庫的多表銜接,建議為外鍵創(chuàng)建
56、一個索引,以提高銜接性能主鍵與外鍵的數(shù)據(jù)類型和長度必需一致,或系統(tǒng)可轉(zhuǎn)換【例】為表teacher創(chuàng)建外鍵department_id,外鍵department_id參考表department中的主鍵department_id。USE JWGLGOALTER TABLE teacher ADD CONSTRAINT FK_department_id FOREIGN KEY (department_id)REFERENCES department(department_id)GO.l 行級FOREIGN KEY約束,其定義格式為: CONSTRAINT constraint_name FOREIGN
57、 KEY( column ,n ) /* 援用表中的列名或列名的組合 */REFERENCES ref_table(ref_column,n ) /* 被援用表及其列名 */ ON DELETE CASCADE | NO ACTION /* 能否級聯(lián)刪除相關(guān)的記錄 */ ON UPDATE CASCADE | NO ACTION /* 能否級聯(lián)更新相關(guān)的記錄 */ NOT FOR REPLICATION .【例】在XK數(shù)據(jù)庫中為StuNO 表創(chuàng)建名為StuNO _FK的FOREIGN KEY約束,該約束限制StuNO列的數(shù)據(jù)只能是student表的StuNO列存在的數(shù)據(jù)USE XkGOALTE
58、R TABLE StuCouADD CONSTRAINT StuNo_FK FOREIGN KEY (StuNo)REFERENCES Student (StuNo)GO.【例】刪除剛建立的名為StuNO _FK的FOREIGN KEY約束USE XkGOALTER TABLE StuCouDROP CONSTRAINT STuNo_FK GO.【例】 為Student表中的所在班級列(ClassID)添加一個FOREIGN KEY約束。ALTER TABLE Student ADD CONSTRAINT FK_Student_ClassFOREIGN KEY( ClassID )REFERE
59、NCES Class( ClassID )ON UPDATE CASCADE.外部鍵約束用于強迫參照完好性,提供單個字段或者多個字段的參照完好性。當(dāng)運用外部鍵約束時,應(yīng)該思索以下幾個要素:外部鍵約束提供了字段參照完好性。外部鍵從句中的字段數(shù)目和每個字段指定的數(shù)據(jù)類型必需和REFERENCES從句中的字段相匹配。外部鍵約束不能自動創(chuàng)建索引,需求用戶手動創(chuàng)建。 .用戶想要修正外部鍵約束的數(shù)據(jù),必需有對外部鍵約束所參考表的SELECT權(quán)限或者REFERENCES權(quán)限。參考同一表中的字段時,必需只運用REFERENCES子句,不能運用外部鍵子句。一個表中最多可以有31個外部鍵約束。在暫時表中,不能運用
60、外部鍵約束。主鍵和外部鍵的數(shù)據(jù)類型必需嚴厲匹配。.3. 運用企業(yè)管理器管理約束1管理NOT NULL、DEFAULT約束1啟動企業(yè)管理器,展開效力器組,再展開要操作的效力器。2展開“數(shù)據(jù)庫文件夾,再展開要操作的數(shù)據(jù)庫Educational。3單擊展開的“表項,在右邊的“表列表框中顯示出所選數(shù)據(jù)庫中的一切表。4右擊要在其中設(shè)置NOT NULL、DEFAULT約束的數(shù)據(jù)表Student,在彈出的快捷菜單中選擇“設(shè)計表菜單項,出現(xiàn) “設(shè)計表Student對話框。5中間列表中的一行為一列的定義,選中要設(shè)置NOT NULL約束的StudentName列,單擊行尾“允許空列,將其中的“去掉即可實現(xiàn)NOT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視播放器硬件構(gòu)成考核試卷
- 電子運動比賽現(xiàn)場設(shè)備考核試卷
- 窄軌機車車輛基礎(chǔ)知識考核試卷
- 清理呼吸道分泌物的護理技術(shù)
- 河北省邢臺市2023~2024學(xué)年高一數(shù)學(xué)下學(xué)期第三次月考試題含答案
- 江西環(huán)境工程職業(yè)學(xué)院《外科學(xué)實踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 廈門安防科技職業(yè)學(xué)院《醫(yī)學(xué)實驗技術(shù)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏藏醫(yī)藥大學(xué)《中小學(xué)舞蹈創(chuàng)編》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東藝術(shù)學(xué)院《普通物理專題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省連云港市贛榆區(qū)2024-2025學(xué)年小升初總復(fù)習(xí)數(shù)學(xué)精練含解析
- 圓周率1000000位 完整版
- 復(fù)旦大學(xué)附屬眼耳鼻喉醫(yī)院耳鼻喉進修匯報
- DB33-1036-2021《公共建筑節(jié)能設(shè)計標準》
- 巖芯鑒定手冊
- 快速排序算法高校試講PPT
- 甘肅歷史與甘肅文化
- 工程勘察設(shè)計收費標準
- 高邊坡施工危險源辨識及分析
- 江蘇工業(yè)企業(yè)較大以上風(fēng)險目錄
- 監(jiān)理質(zhì)量評估報告(主體分部)
- 鍋爐爆炸事故演練方案(模板)
評論
0/150
提交評論