SQL Server 2014數(shù)據(jù)庫技術(shù)應(yīng)用實(shí)踐教程_第1頁
SQL Server 2014數(shù)據(jù)庫技術(shù)應(yīng)用實(shí)踐教程_第2頁
SQL Server 2014數(shù)據(jù)庫技術(shù)應(yīng)用實(shí)踐教程_第3頁
SQL Server 2014數(shù)據(jù)庫技術(shù)應(yīng)用實(shí)踐教程_第4頁
SQL Server 2014數(shù)據(jù)庫技術(shù)應(yīng)用實(shí)踐教程_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、項(xiàng)目四 訂票管理的數(shù)據(jù)表創(chuàng)建huySQL Server 2014數(shù)據(jù)庫應(yīng)用實(shí)踐教程書名:SQL Server 2014數(shù)據(jù)庫應(yīng)用實(shí)踐教程書號(hào):978-7-111-57538-2作者:蘇琳出版社:機(jī)械工業(yè)出版社主要內(nèi)容項(xiàng)目四 訂票管理的數(shù)據(jù)庫創(chuàng)建4.1 數(shù)據(jù)表概述4.2創(chuàng)建民航訂票管理數(shù)據(jù)庫的數(shù)據(jù)表4.3 minhang數(shù)據(jù)庫的數(shù)據(jù)表管理4.4民航訂票數(shù)據(jù)庫數(shù)據(jù)的完整性4.5數(shù)據(jù)表中數(shù)據(jù)的操作實(shí)踐訓(xùn)練知識(shí) 掌握SQL Server2014中的數(shù)據(jù)類型;掌握建立數(shù)據(jù)表的方法;掌握查看、修改和刪除數(shù)據(jù)表的方法;掌握使用主鍵約束和惟一約束保證數(shù)據(jù)表的完整性、使用檢查約束、默認(rèn)值和規(guī)則保證列的完整性;掌

2、握使用主鍵和外鍵來保證數(shù)據(jù)表之間的完整性;掌握表中數(shù)據(jù)的添加、修改和刪除的方法。 技能 學(xué)會(huì)創(chuàng)建數(shù)據(jù)表;學(xué)會(huì)創(chuàng)建和修改數(shù)據(jù)庫中的數(shù)據(jù)表;學(xué)會(huì)使用約束來保證數(shù)據(jù)的完整性。素質(zhì) 嚴(yán)謹(jǐn)認(rèn)真的工作態(tài)度語言表達(dá)和與人溝通能力團(tuán)隊(duì)合作精神本課目標(biāo)4.1 數(shù)據(jù)表概述4.1.1表的基本概念數(shù)據(jù)庫中的表是組織和管理數(shù)據(jù)的基本單位,數(shù)據(jù)庫的數(shù)據(jù)保存在表中,數(shù)據(jù)庫的管理和開放都依賴于表。表的特性如下:表是組織和管理數(shù)據(jù)的基本單位。表由行和列組成的二維結(jié)構(gòu)。表中的一行稱為一條記錄,表中的一列稱為一個(gè)字段。說明:每個(gè)SQL Server數(shù)據(jù)庫可容納多達(dá)20億個(gè)表,每個(gè)表中至多可以有1024列,每一行最多允許有8086個(gè)

3、字節(jié)。4.1.2 SQL2014 的數(shù)據(jù)類型 1、數(shù)據(jù)類型-數(shù)字型數(shù)據(jù)類型說 明bigint-263 (-1.8E19 ) 263-1 (1.8E19 )的整型數(shù)int-231 (-2 147 483 648) 231-1 (2 147 483 647)的整型數(shù)smallint-215 (-32 768) 216-1 (32 767)的整型數(shù)tinyint0 255的整型數(shù)float浮點(diǎn)數(shù)數(shù)據(jù),從1.79E +308 到 1.79E+308 real浮點(diǎn)精度數(shù)字?jǐn)?shù)據(jù),從3.40E+38 到 3.40E+38 bit整數(shù)數(shù)據(jù),值為1或0numeric(p, s)固定精度和小數(shù)的數(shù)字?jǐn)?shù)據(jù),取值范圍

4、從-1038+1 到 10381。p 變量指定精度,取值范圍從1到38。s變量指定小數(shù)位數(shù),取值范圍從0到p表4-1 SQL Server 2014 支持的數(shù)字型數(shù)據(jù)類型2、數(shù)據(jù)類型-貨幣型 數(shù)據(jù)類型范 圍money-922,337,203,685,477.5808 到 922,337,203,685,477.5807smallmoney-214,748.3648 到 214,748.3647表4-2 SQL Server 2014 支持的貨幣數(shù)據(jù)類型3、數(shù)據(jù)類型-日期型 數(shù)據(jù)類型范 圍精確度datetime1753年1月 1日到 9999年12月31日3.33毫秒smalldatetime1

5、900年1月1日到 2079年6月6日1分鐘表4-3 SQL Server 2014 支持的日期數(shù)據(jù)類型4、數(shù)據(jù)類型-字符型數(shù)據(jù)類型說 明char (n) 固定長度的字符數(shù)據(jù),長度為n個(gè)字節(jié),n 的取值范圍為 1 8 000 varchar (n) 可變長度的字符數(shù)據(jù),長度為n個(gè)字節(jié),n 的取值范圍為 18 000 nchar (n) 固定長度的Unicode 字符數(shù)據(jù)。n 值在 14 000 之間 nvarchar (n) 可變長度的Unicode 字符數(shù)據(jù)。n 值在 14 000 之間Text變長度字符數(shù)據(jù),最多達(dá)到2 147 483 647 字節(jié)nText變長度的Unicode字符數(shù)據(jù)最

6、多可達(dá)1 073 741 823 個(gè)字符說明:(1)n的默認(rèn)值均為1。(2)對于一個(gè)char類型字段,不論用戶輸入的字符串有多長(不大于n),長度均為n個(gè)字節(jié)。當(dāng)輸入字符串長度大于n時(shí),系統(tǒng)自動(dòng)截取n個(gè)長度的字符串;而變長字符型varchar(n)的長度為輸入的字符串的實(shí)際長度,而不一定是n。表4-4 SQL Server 2014 支持的字符型數(shù)據(jù)類型5、數(shù)據(jù)類型-字節(jié)二進(jìn)制和圖像型數(shù)據(jù)類型說 明binary (n)長度為 n 字節(jié)的固定長度二進(jìn)制數(shù)據(jù),其中 n 是從1到8000的值varbinary (n) 可變長度二進(jìn)制數(shù)據(jù)。n 可以取從1到8,000的值Image變長度二進(jìn)制數(shù)據(jù) 最長

7、為2147 483 647字節(jié)表4-5 SQL Server 2014 支持的二進(jìn)制和圖像型數(shù)據(jù)類型 數(shù)據(jù)類型說 明UniqueIdentifier唯一標(biāo)識(shí)數(shù)字存儲(chǔ)為 16 字節(jié)的二進(jìn)制值TimeStamp當(dāng)插入或者修改行時(shí),自動(dòng)生成的惟一的二進(jìn)制數(shù)字的數(shù)據(jù)類型Cursor允許在存儲(chǔ)過程中創(chuàng)建游標(biāo)變量,游標(biāo)允許一次一行地處理數(shù)據(jù),這個(gè)數(shù)據(jù)類型不能用作表中的列數(shù)據(jù)類sql_variant可包含除text、ntext、image 和 timestamp 之外的其他任何數(shù)據(jù)類型Table一種特殊的數(shù)據(jù)類型,用于存儲(chǔ)結(jié)果集以進(jìn)行后續(xù)處理 XML存儲(chǔ) XML 數(shù)據(jù)的數(shù)據(jù)類型??梢栽诹兄谢蛘?xml 類型

8、的變量中存儲(chǔ) xml 實(shí)例表4-6 SQL Server 2014 支持的其它數(shù)據(jù)類型6、數(shù)據(jù)類型-其它數(shù)據(jù)類型 4.1.3列的屬性 設(shè)計(jì)數(shù)據(jù)表,實(shí)際就是設(shè)計(jì)列的屬性,如:名稱、數(shù)據(jù)類型、可否為空和數(shù)據(jù)長度等。1、列的為空性 沒有輸入的值,未知或未定義。列值可以接受空值NULL,也可以拒絕空值NOT NULL 。NULL是一個(gè)特殊值,NULL不同于空字符或者0??兆址?都是有效的字符或數(shù)字。2、IDENTITY屬性 可以使表的列包含系統(tǒng)自動(dòng)生成的數(shù)字,可以惟一地標(biāo)識(shí)表的每一行,即表中的每行數(shù)據(jù)列上的數(shù)字均不相同。IDENTITY屬性的表達(dá)格式如下。 IDENTITY (s, i) 其中,s

9、(seed) 表示起始值,i(increment) 表示增量值,其默認(rèn)值為1。只有整數(shù)數(shù)據(jù)類型的數(shù)據(jù)列可用于標(biāo)識(shí)列,一個(gè)表只能有一個(gè)標(biāo)識(shí)列。可以指定種子和增量,但不能更新列。 插入數(shù)據(jù)到含有IDENTITY列的表中時(shí),初始值s在插入第一行數(shù)據(jù)時(shí)使用,以后就由SQL Server 2014根據(jù)上一次使用的IDENTITY值加上增量i得到新的IDENTITY值。4.2創(chuàng)建民航訂票管理數(shù)據(jù)庫的數(shù)據(jù)表4.2.1使用Management Studio 【例4.1】在minhang數(shù)據(jù)庫中,利用Management Studio 創(chuàng)建會(huì)員表。分析:使用Management Studio 創(chuàng)建數(shù)據(jù)表,即利用

10、Management Studio職權(quán)中的表設(shè)計(jì)器創(chuàng)建表的結(jié)構(gòu)。表設(shè)計(jì)器是SQL Server 2014 提供的可視化創(chuàng)建表的一種工具,主要部分是列管理。用戶可以使用表設(shè)計(jì)器完成對表中所包含列的管理工作,包括創(chuàng)建列、刪除列、修改數(shù)據(jù)類型、設(shè)置主鍵和索引等。具體包括:(Uno、Uname、Upass、Tname、Usex、Utel、Umail、Uidentity_id、mileage、grade)其含義是:(會(huì)員編號(hào)、會(huì)員名稱、密碼、真實(shí)姓名、性別、電話、E-main、身份證號(hào)、里程累計(jì)、會(huì)員等級(jí))4.2.2使用CREATE TABLE語句 使用CREATE TABLE語句創(chuàng)建數(shù)據(jù)庫的基本語法格

11、式如下。CREATE TABLE ( NULL | NOT NULL IDENTITY ( seed ,increment ) ,n ) 參數(shù)說明如下:NULL | NOT NULL :指定列的為空性,默認(rèn)值為NOT NULL。IDENTITY ( seed , increment ) :指定為標(biāo)識(shí)列,seed為標(biāo)示種子,increment為遞增量。 【例4.2】在minhang數(shù)據(jù)庫中,利用 Create Table語句,創(chuàng)建航班表。具體包括:(Fno、City1、City2、Time1、Time2、Airport1、Airport2、Ano、Flag、PlaneModel、Gate)其含義

12、是:(航班號(hào)、出發(fā)城市、目的城市、起飛時(shí)間、降落時(shí)間、起飛機(jī)場、降落機(jī)場、航空公司編號(hào)、航班狀態(tài)、機(jī)型、登機(jī)口)USE minhangGOCREATE TABLE dbo.Flight1(Fno nchar(8) NOT NULL PRIMARY KEY,/* PRIMARY KEY 表示主鍵*/City1 varchar(20) NOT NULL,City2 varchar(20) NOT NULL,Time1 datetime NOT NULL,Time2 datetime NOT NULL,Airport1 varchar(30) NOT NULL,Airport2 varchar(30

13、) NOT NULL,Ano int NULL,Flag varchar(6) NULL ,PlaneModel nchar(10) NULL,Gate nchar(10) NULL)Go4.3 minhang數(shù)據(jù)庫的數(shù)據(jù)表管理4.3.1查看表結(jié)構(gòu) 1、查看數(shù)據(jù)表的屬性 【例4.3】利用Management Studio,查看艙位定價(jià)表price的屬性信息及列的屬性信息。分析:利用Management Studio,可以以圖形方式查看數(shù)據(jù)表的結(jié)構(gòu)。具體操作步驟如下:(1)在【對象資源管理器】窗口中,展開minhang【表】節(jié)點(diǎn)。(2)右擊price數(shù)據(jù)表,在彈出的快捷菜單中選擇【屬性】選項(xiàng),打

14、開【表屬性】窗口,如圖4.3所示。在該窗口中可查看表的數(shù)據(jù)空間、記錄數(shù)目、是否分區(qū)、創(chuàng)建日期、用戶權(quán)限和擴(kuò)展屬性等。(3)再次展開price表【列】節(jié)點(diǎn),右擊Pno列,在彈出的快捷菜單中選擇【屬性】選項(xiàng),打開【列屬性】窗口,如圖4.4所示。在該窗口中可查看該列的數(shù)據(jù)類型、是否為主鍵、是否允許空。2、查看表結(jié)構(gòu)【例4.4】查看price的表結(jié)構(gòu)、約束、觸發(fā)器等信息。具體的操作步驟是:展開minhang數(shù)據(jù)庫中price表的【列】、【鍵】、【約束】、【觸發(fā)器】和【索引】等對象,即可看到相關(guān)信息,如圖4.5所示。3、查看表中數(shù)據(jù)【例4.5】查看員工表Employee的表中記錄。在Management

15、 Studio中,右擊Employee表節(jié)點(diǎn),在彈出的快捷菜單中選擇【選擇前1000行】選項(xiàng),則會(huì)顯示表中的所有數(shù)據(jù)。在該界面中可以查詢、編輯表中的數(shù)據(jù)。4.3.2修改數(shù)據(jù)表 1、使用Management Studio 2、使用Alter Table 語句使用Alter Table語句可以添加或者刪除表約束,也可以禁用或者啟用已存在的約束或觸發(fā)器,Alter Table 語句功能強(qiáng)大,下面逐一進(jìn)行介紹。(1)添加列添加列的語法格式如下。Alter TableAdd,n【例4.7】在Employee表中添加兩列:籍貫“Birthplace”列,數(shù)據(jù)類型為char(20),允許空;年齡“page”

16、列,數(shù)據(jù)類型為int, 允許空。Alter table EmployeeAdd Birthplace char(20) null,Page int null(2)刪除列刪除列的語法結(jié)構(gòu)如下。ALTER TABLEDROP COLUMN,n【例4.8】在Employee中刪除 “Birthplace”列Ater table EmployeeDrop column Birthplace(3)修改列的定義【例4.9】在Employee中將所在部門(Department)列的數(shù)據(jù)類型修改為varchar(20)。Alter table EmployeeAlter column Department v

17、archar(20)說明:在修改列的定義時(shí),如果修改后的長度小于原來定義的長度,或者數(shù)據(jù)類型的更改可能導(dǎo)致數(shù)據(jù)被更改,則降低列的精度或減少小數(shù)位數(shù)可能導(dǎo)致數(shù)據(jù)被截?cái)?。?)修改列名【例4.10】在Employee表中將Department列重命名為“Pdep”。Sp_rename Employee.Department ,Pdep,Column說明:請將本例測試后恢復(fù),以保持?jǐn)?shù)據(jù)庫整體連續(xù)性。4.3.3刪除數(shù)據(jù)表1、使用Management Studio【例4.11】刪除Employee表。(1)在【對象資源管理器】中,展開minhang數(shù)據(jù)庫|【表】節(jié)點(diǎn)。(2)右擊Employee表節(jié)點(diǎn),在

18、彈出的快捷菜單中選擇【刪除】選項(xiàng)。(3)在打開的【刪除對象】窗口中,單擊【確定】,完成刪除任務(wù)。2、使用DROP TABLE 語句使用DROP TABLE語句語法格式如下:DROP TABLE 【例4.12】刪除Employee表。在查詢編輯器窗口執(zhí)行如下SQL語句:Use minhangGoDrop table EmployeeGo說明:為保持?jǐn)?shù)據(jù)庫延續(xù)性,4.11及4.12執(zhí)行后請還原數(shù)據(jù)庫。4.3.4重命名數(shù)據(jù)表 1、使用Management Studio使用Management Studio修改表名,在指定數(shù)據(jù)庫中,展開表,右擊指定表,在快捷菜單中選擇【重命名】選項(xiàng),輸入新表名即可。2

19、、使用系統(tǒng)存儲(chǔ)過程sp_rename。使用系統(tǒng)存儲(chǔ)過程sp_rename修改表的語法格式如下。Sp_rename 原表名,新表名【例4.13】將員工表Employee更名為newEmployee。Use minhangGoSp_rename Employee,newEmployeeGo說明:更改列名時(shí)必須加引號(hào),更改表名時(shí)可加可不加。4.4 數(shù)據(jù)的完整性數(shù)據(jù)的完整性是指數(shù)據(jù)的精確性和可靠性,主要用于保證數(shù)據(jù)庫中數(shù)據(jù)的質(zhì)量。它是為防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯(cuò)誤信息的輸入/輸出造成無效操作或報(bào)錯(cuò)而提出的。例如,如果輸入了會(huì)員號(hào)值為95001的會(huì)員,則在該數(shù)據(jù)庫中不應(yīng)允許其他會(huì)員使

20、用具有相同值的會(huì)員號(hào)。比如將會(huì)員性別列的取值范圍設(shè)置為只能為“男”或“女”,數(shù)據(jù)庫不應(yīng)接受其他信息,又比如航班表中存儲(chǔ)的航班編號(hào),只能選擇航班表中存在的航班編號(hào)。4.4.1 數(shù)據(jù)完整性的分類數(shù)據(jù)完整性分為4類:實(shí)體完整性(Entity Integrity)、域完整性(Domain Integrity )、參照完整性(Referential Integrity)、用戶定義的完整性(User - defined Integrity)。1、實(shí)體完整性實(shí)體完整性用于保證表中的每一行數(shù)據(jù)在表中是唯一的。2、域完整性域完整性是指數(shù)據(jù)庫表中的列必須滿足某種特定的數(shù)據(jù)類型或約束。其中,約束又包括強(qiáng)制域完整性、

21、限制類型、限制格式或限制可能值的范圍。3、參照完整性參照完整性是指在輸入或刪除記錄時(shí),包含主關(guān)鍵字的主表和包含外關(guān)鍵字的從表的數(shù)據(jù)應(yīng)對應(yīng)一致,保證了表之間數(shù)據(jù)的一致性,防止了數(shù)據(jù)丟失或無意義的數(shù)據(jù)在數(shù)據(jù)庫中擴(kuò)散。在SQL Server中,將防止用戶執(zhí)行下列操作。(1)在主表中沒有關(guān)聯(lián)的記錄時(shí),將記錄添加或更改到相關(guān)表中。(2)更改主表中的值,這會(huì)導(dǎo)致在相關(guān)表中生成孤立的記錄。(3)從主表中刪除記錄,但仍存在與該記錄匹配的相關(guān)記錄。4、用戶定義完整性用戶定義的不屬于其他任何完整性類別的特定業(yè)務(wù)規(guī)則稱為用戶定義完整性。所有完整性類別都支持用戶定義完整性。完整性類型約束類型描 述約束對象域完整性De

22、fault當(dāng)使用INSERT語句插入數(shù)據(jù)時(shí),若已定義默認(rèn)值的列沒有提供指定值,則將該默認(rèn)值插入記錄中列Check指定某一列可接受的值實(shí)體完整性Primary Key每行記錄的唯一標(biāo)識(shí)符,確保用戶不能輸入重復(fù)值,并自動(dòng)創(chuàng)建索引,提高性能,該列不允許使用空值行Unique在列集內(nèi)強(qiáng)制執(zhí)行值的唯一性,防止出現(xiàn)重復(fù)值,表中不允許有兩行的同一列包含相同的非空值參照完整性Foreign Key定義一列或幾列,其值與本表或其他表的主鍵或UNIQUE列相匹配表與表之間4.4.2 約束概述 1、約束定義 約束(Constraint)是Microsoft SQL Server 2014提供的自動(dòng)保持?jǐn)?shù)據(jù)庫完整性的

23、一種方法。約束就是限制,定義約束就是定義可輸入表或表的單個(gè)列中的數(shù)據(jù)的限制條件。2、約束分類在SQL Server中有5種約束:主關(guān)鍵字約束(Primary Key Constraint)、外關(guān)鍵字約束(Foreign Key Constraint)、唯一約束(Unique Constraint)、檢查約束(Check Constraint)、默認(rèn)約束(Default Constraint) 約束與完整性之間的關(guān)系如表4-7所示。表4-7 約束與完整性之間的關(guān)系4.4.3 主鍵約束 主鍵約束用于指定表的一列或幾列的組合唯一標(biāo)識(shí)表,即能在表中唯一地指定一行記錄,這樣的一列或列的組合稱為表的主鍵。

24、定義主鍵約束的列其值不可為空、不可重復(fù);每個(gè)表中只能有一個(gè)主鍵,主鍵約束也稱實(shí)體完整性約束。1、使用Management Studio 創(chuàng)建主鍵約束【例4.14】在minhang數(shù)據(jù)庫中,創(chuàng)建主鍵約束。2、在創(chuàng)建表同時(shí)創(chuàng)建主鍵約束(1)創(chuàng)建單個(gè)列的主鍵可采用列級(jí)約束,它的語法格式如下。CREATE TABLE表名(列名列屬性CONSTRAINT約束名PRIMARY KEY CLUSTEREDNONCLUSTERED)(2)多個(gè)列組合的主鍵約束,采用表級(jí)約束,它的語法格式如下。CONSTRAINT約束名PRIMARY KEY CLUSTEREDNONCLUSTERED(列名1,列名16)其中,約

25、束名在數(shù)據(jù)庫中必須是唯一的;CLUSTEREDNONCLUSTERED表示在創(chuàng)建主鍵時(shí)自動(dòng)創(chuàng)建的索引類別,CLUSTERED為默認(rèn)值;主關(guān)鍵字最多由16個(gè)列組成?!纠?.15】在minhang數(shù)據(jù)庫中,創(chuàng)建員工表(Employee)時(shí),創(chuàng)建主鍵。當(dāng)員工表不存在時(shí),可在查詢編輯器中執(zhí)行如下SQL語句。USE minhangGOCREATE TABLE Employee( Pno char(6) NOT NULL primary key, Pname varchar(20) NOT NULL, Psex char(2), Page tinyint )說明:在此處創(chuàng)建的約束包含在列的定義中,不用指定

26、約束名,系統(tǒng)自動(dòng)分配名稱。稱之為列級(jí)完整性。【例4.16】在minhang數(shù)據(jù)庫中,創(chuàng)建如圖4.10所示的員工表。圖4.10 員工表分析:對于主鍵只有一列的情況下,可以采用表級(jí)約束或列級(jí)約束,若主鍵包含2列及以上,必須采用表級(jí)約束,即在所有的列定義后再定義約束。創(chuàng)建一個(gè)名稱為PK_business的主鍵約束,代碼為“CONSTRAINT PK_business PRIMARY KEY(Uno,Tno)”。在查詢編輯器窗口中執(zhí)行如下的SQL語句。CREATE TABLE business (Uno bigint NOT NULL, Tno bigint NOT NULL, CONSTRAINT

27、PK_business PRIMARY KEY ( Uno,Tno ) )GO說明:采用表約束時(shí),必須指明約束名稱,表約束與列定義相互獨(dú)立。3、在一張現(xiàn)有表上添加主鍵約束(1)使用Management Studio添加約束在Management Studio中,右擊要添加約束的表,在彈出的快捷菜單中選擇【設(shè)計(jì)】選項(xiàng),利用表設(shè)計(jì)器添加約束。(2)利用ALTER TABLE語句使用ALTER TABLE語句不僅可以修改列的定義,而且可以添加和刪除約束。它的語法格式如下。ALTER TABLEADD CONSTRAINT 約束名 PRIMARY KEY(列名,n)例如:如果Business表創(chuàng)建時(shí)沒

28、有添加主鍵,則可以執(zhí)行如下語句添加。Alter table BusinessAdd constraint PK_business primary key (Uno,Tno)4.4.4 外鍵約束兩個(gè)表中如果有共同列,利用外部關(guān)鍵字與主關(guān)鍵字將兩個(gè)表關(guān)聯(lián)起來。例如,不同次航班的同級(jí)別的座艙(例如經(jīng)濟(jì)艙),其價(jià)位是不一定一樣的,就必需要將它們加以區(qū)分,因此通過艙位定價(jià)表和航班表的共同列“航班序號(hào)(Fid列)”將這兩個(gè)表關(guān)聯(lián)起來。在航班表中Fid列定義為主關(guān)鍵字,在艙位定價(jià)表中通過定義Fid列為外關(guān)鍵字。艙位定價(jià)(艙位編號(hào)、艙位類型、行數(shù)量、列數(shù)量、艙位定價(jià)、折扣、航班序號(hào))航班(航班序號(hào)、航班號(hào)、出

29、發(fā)城市、目的城市、起飛時(shí)間、降落時(shí)間、起飛機(jī)場、降落機(jī)場、航班狀態(tài)、機(jī)型、登機(jī)口、航空公司編號(hào))當(dāng)向含有外關(guān)鍵字的艙位定價(jià)表中插入數(shù)據(jù)時(shí),如果主鍵表航班表的Fid列中沒有存在的值,系統(tǒng)會(huì)拒絕插入數(shù)據(jù),所以外鍵約束也叫參照完整性約束。1、使用Management Studio 創(chuàng)建外鍵約束?!纠?.17】在minhang數(shù)據(jù)庫的艙位定價(jià)表中,創(chuàng)建外鍵約束。分析:在艙位定價(jià)表的結(jié)構(gòu)中,有主鍵價(jià)位編號(hào)(Prino)列,有外鍵Fid列和航班表中的Fid列對應(yīng),可以使用Management Studio來實(shí)現(xiàn)外鍵約束。2、使用Transact-SQL 語句定義外鍵(1)在創(chuàng)建表時(shí),在定義列的同時(shí)定義外鍵

30、,它的語法格式如下。CREATE TABLE表名(列名 數(shù)據(jù)類型 為空性FOREIGN KEY REFERENCES ref_ table (ref_column))其中,參數(shù)說明如下。REFERENCES:參照。ref_table:主鍵表名,要建立關(guān)聯(lián)的被參照表的名稱。ref_column;主鍵列名?!纠?.18】在minhang數(shù)據(jù)庫中,重新創(chuàng)建艙位定價(jià)表。分析:艙位定價(jià)表中的Fno參照航班表的Fno。在查詢編輯器窗口中執(zhí)行如下的Transact-SQL語句。USE minhangGoCREATE TABLE Price ( prino bigint NOT NULL PRIMARY KE

31、Y ,Fno nchar(8) NULL FOREIGN KEY REFERENCES Flight(Fno),AIRType nchar(10) NULL,Cabin nchar(10) NULL,num int NULL,pri money NULL,Discount float NULL)GO4.4.5 唯一約束 唯一約定用于指定非主鍵的一個(gè)列或多個(gè)列的組合值具有唯一性,以防止在列中輸入重復(fù)的值,也就是說如果一個(gè)數(shù)據(jù)表已經(jīng)設(shè)置了主鍵約束,但該表中還包含其他的非主鍵列,也必須具有唯一性,為避免該列中的值出現(xiàn)重復(fù)輸入的情況,就必須使用唯一約束(一個(gè)數(shù)據(jù)表不能包含兩個(gè)或兩個(gè)以上的主鍵約束)。唯

32、一約束與主鍵約束的區(qū)別如下:唯一約束指定的列可以為NULL,但主鍵約束所在的列則不允許為NULL。一個(gè)表中可以包含多個(gè)唯一約束,而主鍵約束則只能有一個(gè)?!纠?.19】在minhang數(shù)據(jù)庫中的會(huì)員Users表中,為身份證“Uidentity_id”列添加唯一約束,保證身份證不重復(fù)。創(chuàng)建后使用Transact-SQL語句刪除此約束。使用Management Studio來實(shí)現(xiàn)外鍵約束。創(chuàng)建表的同時(shí)創(chuàng)建UNIQUE約束語法格式1:CREATE TABLE表名(列名 列屬性 UNIQUE,n)語法格式2:定義唯一約束的語法如下。CONSTRAINT約束名UNIQUECLUSTEREDNONCLUST

33、EREDcolumn_name1,colun_name2,column_name16在查詢編輯器窗口中執(zhí)行如下的Transact-SQL語句。USE minhangGOALTER TABLE UsersADD CONSTRAINT un_Uidentity_id UNIQUE(Uidentity_id)GOALTER TABLE UsersDROP CONSTRAINT un_Uidentity_idGO4.4.6 檢查約束檢查約束(CHECK約束)實(shí)際上是驗(yàn)證字段輸入內(nèi)容的規(guī)則,表示一個(gè)字段的輸入內(nèi)容必須滿足CHECK約束的條件,若不滿足,則數(shù)據(jù)無法正常輸入??梢詫γ總€(gè)列設(shè)置CHECK約束,

34、檢查約束也叫用戶自定義完整性。1、使用Management studio【例4.20】在minhang數(shù)據(jù)庫中的會(huì)員表中,為性別列(Usex)列添加CHECK約束,保證性別列的輸入值為“男”或“女”2、使用Transact-SQL 語句 創(chuàng)建CHECK約束的語法格式如下。 CONSTRAINT 約束名 CHECK ( logical_expression ) ,n 【例4.21】在minhang數(shù)據(jù)庫中,為了保證輸入數(shù)據(jù)的質(zhì)量,確保身份證的數(shù)字長度等于18。分析:在已經(jīng)創(chuàng)建的會(huì)員中,確保身份證的數(shù)字長度等于18,可以在表中添加CHECK約束。在查詢編輯器窗口中執(zhí)行如下的Transact-SQL

35、語句。ALTER TABLE UsersADD CONSTRAINT CK_Users_len CHECK (len(Uidentity_id)=(18) 4.4.7 默認(rèn)值約束 默認(rèn)值約束(DEFAULT)用于確保域完整性,它提供了一種為數(shù)據(jù)表中任何一列提供默認(rèn)值的手段。默認(rèn)值是指使用INSERT語句向數(shù)據(jù)表中插入數(shù)據(jù)時(shí),如果沒有為某一列指定數(shù)據(jù),DEFAULT約束提供隨新記錄一起存儲(chǔ)到數(shù)據(jù)表中該列的默認(rèn)值。例如,在會(huì)員表Users的“Usex”列定義了一個(gè)DEFAULT約束為“男”,則每當(dāng)添加新會(huì)員時(shí),如果沒有為其指定性別,則默認(rèn)為“男”。在使用DEFAULT約束時(shí),用戶需注意以下幾點(diǎn)。D

36、EFAULT約束只能應(yīng)用于INSERT語句,且定義的值必須與該列的數(shù)據(jù)類型和精度一致。在每一列上只能有一個(gè)DEFAULT約束。如果有多個(gè)DEFAULT約束,系統(tǒng)將無法確定在該列上使用哪一個(gè)約束。DEFAULT約束不能定義在指定IDENTITY屬性或數(shù)據(jù)類型為timestamp的列上,因?yàn)閷τ谶@些列,系統(tǒng)會(huì)自動(dòng)提供數(shù)據(jù),使用DEFAULT約束是沒有意義的。DEFAULT約束允許使用一些系統(tǒng)函數(shù)提供的值。1、使用Management studio 創(chuàng)建默認(rèn)值 【例4.22】在minhang數(shù)據(jù)庫中的員工表中,為“性別”列設(shè)定默認(rèn)值“男”2、使用Transact-SQL 語句創(chuàng)建默認(rèn)值定義創(chuàng)建DEF

37、AULT定義的語法格式如下。CONSTRAINT 約束名 DEFAULT constant_expression FOR 列名 其中,DEFAULT為默認(rèn)值;constant_expression是用做列的默認(rèn)值的常量、NULL或系統(tǒng)函數(shù)?!纠?.23】使用SQL語句,實(shí)現(xiàn)例4.24中的默認(rèn)值約束。在查詢編輯器窗口執(zhí)行如下Transact-SQL 語句。USE minhangGOAlter table EmployeeAddConstraint def_Psex default 男 for Psex4.4.8 默認(rèn)值和規(guī)則1、默認(rèn)值與默認(rèn)值約束類似,默認(rèn)值(Default)的作用也是:當(dāng)用戶向

38、數(shù)據(jù)表中插入數(shù)據(jù)行時(shí),如果沒有為某列輸入值,則由SQL Server自動(dòng)為該列賦予默認(rèn)值。與默認(rèn)值約束不同的是,默認(rèn)值是一種數(shù)據(jù)庫對象。在數(shù)據(jù)庫創(chuàng)建默認(rèn)值對象后,可以將其綁定到多個(gè)數(shù)據(jù)表的一個(gè)或多個(gè)列應(yīng)用;默認(rèn)值約束只能用于約束一個(gè)表中的某一列。當(dāng)將默認(rèn)值綁定到列或用戶定義的數(shù)據(jù)類型時(shí),如果插入數(shù)據(jù)時(shí)沒有為被綁定的對象明確提供值,默認(rèn)值便指定一個(gè)值,交將其插入到對象所綁定的列中(在用戶定義數(shù)據(jù)類型的情況下,插入到所有列中)。使用默認(rèn)值對象的方法:使用CREATE DEFAULT語句創(chuàng)建默認(rèn)對象,然后使用系統(tǒng)存儲(chǔ)過程sp_bindefault將其綁定到列上。(1)創(chuàng)建默認(rèn)值對象創(chuàng)建默認(rèn)值對象的語

39、法格式如下。CREATE DEFAULT default_name AS 表達(dá)式其中,default_name為默認(rèn)值對象名稱,表達(dá)式為默認(rèn)值的常數(shù)表達(dá)式。(2)默認(rèn)值綁定系統(tǒng)存儲(chǔ)過程sp_bindefault用于將默認(rèn)值綁定到列或用戶定義的數(shù)據(jù)類型,它的語法格式如下。sp_bindefault 默認(rèn)值對象名稱 , object_name其中,參數(shù)object_name為被綁定默認(rèn)值的列名或用戶定義的數(shù)據(jù)類型?!纠?.24】使用SQL語句創(chuàng)建默認(rèn)值對象df_Ticket并綁定到Ticket表的Tflag列上,使得新添加的機(jī)票狀態(tài)都是“未售”。在查詢編輯器窗口執(zhí)行如下的Transact-sql語

40、句。Use minhangGO-創(chuàng)建默認(rèn)值對象CREATE DEFAULT df_Ticket As 未售GO-綁定默認(rèn)值對象EXEC sp_binDefault df_Ticket, Ticket.Tflag【例4.25】刪除默認(rèn)值對象df_Ticket。使用語句刪除默認(rèn)值對象df_Ticket(1)在查詢編輯器窗口中執(zhí)行如下的語句解除綁定。Use minhangGoExec sp_unbindefault Ticket.TflagGo(2)在查詢編輯器窗口中執(zhí)行如下的語句刪除默認(rèn)值對象。Use minhangGoDrop default df_TicketGo2、規(guī)則規(guī)則(Rule)就是對

41、存儲(chǔ)在表中列或用戶自定義數(shù)據(jù)類型的取值范圍的規(guī)定或限制。規(guī)則是一種數(shù)據(jù)庫對象。規(guī)則與其作用的表或用戶自定義數(shù)據(jù)類型是相互獨(dú)立的。規(guī)則和約束可以同時(shí)使用,表中的列可以有一個(gè)規(guī)則及多個(gè)CHECK約束,規(guī)則與CHECK約束很相似。相比之下,使用在ALTER TABLE或CREATE TABLE命令中的CHECK約束是更標(biāo)準(zhǔn)的限制列值的方法,但CHECK約束不能直接作用于用戶自定義數(shù)據(jù)類型。在當(dāng)前數(shù)據(jù)庫中使用CREATE RULE命令創(chuàng)建規(guī)則,其語法格式如下。CREATE RULE 規(guī)則名稱 AS condition_expression其中,condition_expression是規(guī)則的定義。co

42、ndition_expression子句可以用于WHERE條件子句中的任何表達(dá)式,它可以包含算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和謂詞(如IN、LIKE和BETWEEN AND 等)。SEX IN(男,女)Set in (1,2,3,4,5)Name like 王%Bookname like % 數(shù)據(jù)庫%Age between 1 and 119【例4.26】創(chuàng)建年齡輸入規(guī)則rl_age,即輸入的年齡在0-120之間。在查詢編輯器窗口中執(zhí)行如下的Transact-SQL語句。USE minhangGOCREATE RULE rl_age as age50 or age20 GO說明:每個(gè)局部變量的前面都有一

43、個(gè)字符。在創(chuàng)建規(guī)則時(shí),可以使用任何名稱或符號(hào)表示值,但第一個(gè)字符必須是符號(hào)?!纠?.27】將規(guī)則rl_age綁定到員工表的年齡(Uage)列上。分析:使用系統(tǒng)存儲(chǔ)過程sp_bindrule將規(guī)則綁定到列或用戶定義的數(shù)據(jù)類型。它的語法格式如下。sp_bindrule 規(guī)則名稱 ,object_name其中,object_name參數(shù)綁定了規(guī)則的表和列或用戶定義的數(shù)據(jù)類型。在查詢編輯器窗口中執(zhí)行如下Transact-SQL語句。USE minhangGOEXEC sp_bindrule rl_age, Employee.PageGO【例4.28】刪除rl_age規(guī)則。分析:刪除規(guī)則同刪除默認(rèn)值對象

44、類似。如果規(guī)則當(dāng)前綁定到列或別名數(shù)據(jù)類型,則需先解除綁定才能刪除該規(guī)則。使用sp_unbindrule解除綁定。在查詢編輯器窗口中如下的Transact-SQL語句。(1)解除規(guī)則綁定在查詢編輯器窗口中執(zhí)行如下Transact-SQL語句。USE minhangGOEXEC sp_unbindrule Employee.PageGO(2)刪除規(guī)則在查詢編輯器窗口中執(zhí)行如下Transact-SQL語句。USE minhangGODROP RULE rl_ageGO說明:規(guī)則被刪除后,在以前受規(guī)則約束的列中輸入的新數(shù)據(jù)將不受規(guī)則的約束。現(xiàn)有數(shù)據(jù)不受任何影響。4.5數(shù)據(jù)表中數(shù)據(jù)的操作在SQL Ser

45、ver2014中,經(jīng)過創(chuàng)建的表確定基本結(jié)構(gòu)以后,接著就是表中數(shù)據(jù)的處理:添加、修改和刪除數(shù)據(jù)。數(shù)據(jù)操作有兩種方法:一種是使用Management Studio操作表中數(shù)據(jù);另一種是使用Management Studio的可視化工具。4.5.1 插入記錄INSERT語句提供了添加數(shù)據(jù)的功能。INSERT語句通常有兩種形式:一種是插入一條記錄;另一種是插入子查詢的結(jié)果,一次可以插入多條記錄。INSERT語句的語法格式如下。INSERT INTO 表名 (column_list)VALUES(DEFAULTNULLexpression,n)其中,各參數(shù)說明如下。INTO:用在INSERT關(guān)鍵字和目標(biāo)

46、表之間的可選關(guān)鍵字。column_list:指定要插入數(shù)據(jù)的列,列名之間用逗號(hào)隔開。DEFAULT:表示使用為此列指定的默認(rèn)值。Expression:指定一個(gè)常數(shù)變量或表達(dá)式。1、插入一條記錄【例4.30】在minhang數(shù)據(jù)庫中,向會(huì)員表Users中插入一條記錄。具體操作步驟如下。(1)展開minhang【表】節(jié)點(diǎn),右擊Users表節(jié)點(diǎn),在彈出的快捷菜單中選擇【編寫表腳本為】【INSERT到】【新查詢編輯器窗口】選項(xiàng),如圖4.21所示,在窗口右側(cè)的【新查詢編輯器窗口】中,提供使用INSERT語句插入記錄代碼的默認(rèn)基本框架。(2)修改代碼。修改VALUE部分的值語句,如圖4.22所示,單擊工具欄上的 按鈕,添加記錄。(3)打開會(huì)員表,驗(yàn)證插入的結(jié)果,如圖4.23所示。若沒有新記錄顯示,請先關(guān)閉打開的表,然后在表上右鍵刷新,重新打開。【例4.31】在minhang數(shù)據(jù)庫中,向會(huì)員表中插入一條記錄:Uname為aizhonghua,姓名為“蘇子墨”。分析:插入一條記錄,使用INSE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論