數(shù)據(jù)庫系統(tǒng)原理第三章-GW_第1頁
數(shù)據(jù)庫系統(tǒng)原理第三章-GW_第2頁
數(shù)據(jù)庫系統(tǒng)原理第三章-GW_第3頁
數(shù)據(jù)庫系統(tǒng)原理第三章-GW_第4頁
數(shù)據(jù)庫系統(tǒng)原理第三章-GW_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第3章:章: SQLSQL語言基礎(chǔ)及數(shù)據(jù)定義功能語言基礎(chǔ)及數(shù)據(jù)定義功能 l3.1 SQL3.1 SQL語言概述語言概述l3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型 l3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l3.4 3.4 索引索引3.1 SQL3.1 SQL語言概述語言概述lSQL(Structured Query Language)是)是用戶操作關(guān)系數(shù)據(jù)庫的通用語言。用戶操作關(guān)系數(shù)據(jù)庫的通用語言。l它包含數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操作它包含數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操作和數(shù)據(jù)控制等與數(shù)據(jù)庫有關(guān)的全部功能。和數(shù)據(jù)控制等與數(shù)據(jù)庫有關(guān)的全部功能。lSQL已經(jīng)成為關(guān)系數(shù)據(jù)庫的標(biāo)

2、準(zhǔn)語言,已經(jīng)成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,現(xiàn)在所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持現(xiàn)在所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。 l3.1.1 SQL3.1.1 SQL語言的發(fā)展語言的發(fā)展 l3.1.2 SQL3.1.2 SQL語言的特點(diǎn)語言的特點(diǎn)l3.1.3 SQL3.1.3 SQL語言功能概述語言功能概述3.1 SQL3.1 SQL語言概述語言概述l3.1.1 SQL3.1.1 SQL語言的發(fā)展語言的發(fā)展19861986年年1010月由美國月由美國ANSI ANSI 公布最早的公布最早的SQLSQL標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。 19891989年年4 4月,月,ISOISO提出了具備完整性特征的提出了具備完整性特征的S

3、QLSQL,稱為,稱為SQL-89SQL-89(SQL1)SQL1)。19921992年年1111月,月,ISOISO又公布了新的又公布了新的SQLSQL標(biāo)準(zhǔn),稱標(biāo)準(zhǔn),稱為為SQL-92SQL-92(以上均為關(guān)系形式)(以上均為關(guān)系形式) (SQL2) SQL2) 。19991999年頒布年頒布SQL-99SQL-99(SQL3) SQL3) ,是,是SQL92SQL92的擴(kuò)的擴(kuò)展。展。3.1 SQL3.1 SQL語言概述語言概述l3.1.2 SQL3.1.2 SQL語言的特點(diǎn)語言的特點(diǎn)1. 1. 一體化一體化2. 2. 高度非過程化高度非過程化3. 3. 簡潔簡潔4. 4. 使用方式多樣使用

4、方式多樣3.1 SQL3.1 SQL語言概述語言概述l3.1.3 SQL3.1.3 SQL語言功能概述語言功能概述四部分:數(shù)據(jù)定義功能、數(shù)據(jù)控制功能、數(shù)據(jù)查詢四部分:數(shù)據(jù)定義功能、數(shù)據(jù)控制功能、數(shù)據(jù)查詢功能和數(shù)據(jù)操縱功能。功能和數(shù)據(jù)操縱功能。SQL功能功能命令動詞命令動詞數(shù)據(jù)查詢數(shù)據(jù)查詢SELECT數(shù)據(jù)定義數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)操縱數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制數(shù)據(jù)控制GRANT、REVOKE3.1 SQL3.1 SQL語言概述語言概述3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l數(shù)值型數(shù)值型 l字符串型字符串型l日期時間型

5、日期時間型l貨幣型貨幣型l數(shù)值型數(shù)值型 準(zhǔn)確型準(zhǔn)確型 整數(shù)整數(shù)Bigint: 8字節(jié),字節(jié), Int:4字節(jié)字節(jié)Smallint:2字節(jié),字節(jié), Tinyint:1字節(jié)字節(jié) Bit:1位,存儲位,存儲1或或0 小數(shù)小數(shù)Numeric(p,q)或)或Decimal(p,q),), 其中:其中:p為數(shù)字位長度,為數(shù)字位長度,q:小數(shù)位長度。:小數(shù)位長度。 近似型近似型 Float:8字節(jié)字節(jié) Real:4字節(jié)字節(jié)3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l字符串型字符串型普通編碼字符串類型普通編碼字符串類型統(tǒng)一字

6、符編碼字符串類型統(tǒng)一字符編碼字符串類型二進(jìn)制字符串類型二進(jìn)制字符串類型3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l普通編碼字符串類型普通編碼字符串類型CharChar(n n): :定長存儲,定長存儲,n=8000 n=8000 VarcharVarchar(n n):不定長存儲(按實際長:不定長存儲(按實際長度存儲),長度最大不超過度存儲),長度最大不超過n , n=8000 n , n=8000 注:注:n n 為字符個數(shù)為字符個數(shù)TextText:存儲大于:存儲大于80008000字節(jié)的文本字節(jié)的文本3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l

7、統(tǒng)一字符編碼字符串類型統(tǒng)一字符編碼字符串類型ncharnchar(n n): :定長存儲,定長存儲,n=4000 n=4000 nvarcharnvarchar(n n):不定長存儲,長度最大:不定長存儲,長度最大不超過不超過n , n=4000 n , n=4000 ntextntext:存儲大于:存儲大于80008000字節(jié)的文本字節(jié)的文本 特點(diǎn):每個字符占兩個字節(jié)特點(diǎn):每個字符占兩個字節(jié)3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l二進(jìn)制字符串類型二進(jìn)制字符串類型Binary(nBinary(n) ):固定長度,:固定長度,n = 8000n = 8000。Varbi

8、nary(nVarbinary(n) ):可變長度,:可變長度,n n 8000 8000 。注:注:n n為二進(jìn)制數(shù)據(jù)的字節(jié)數(shù)為二進(jìn)制數(shù)據(jù)的字節(jié)數(shù)imageimage:大容量、可變長二進(jìn)制字符數(shù)據(jù),:大容量、可變長二進(jìn)制字符數(shù)據(jù),可用于存儲文件??捎糜诖鎯ξ募?。3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l日期時間型DatetimeDatetime:8 8字節(jié),年月日時分秒毫秒字節(jié),年月日時分秒毫秒(例:(例:2008/02/03 10:30:00.000 2008/02/03 10:30:00.000 ) SmallDateTimeSmallDateTime:4 4字節(jié)

9、,年月日時分字節(jié),年月日時分 (例:(例:2008/02/03 10:30:00 2008/02/03 10:30:00 )3.2 SQL3.2 SQL語言支持的數(shù)據(jù)類型語言支持的數(shù)據(jù)類型l貨幣類型貨幣類型MoneyMoney:8 8個字節(jié),精確到貨幣單位的千個字節(jié),精確到貨幣單位的千分之十。分之十。SmallmoneySmallmoney:4 4個字節(jié),精確到貨幣單位個字節(jié),精確到貨幣單位的千分之十。的千分之十。限制到小數(shù)點(diǎn)后限制到小數(shù)點(diǎn)后 4 4 位。位。可以帶有適當(dāng)?shù)呢泿欧?。例如,可以帶有適當(dāng)?shù)呢泿欧?。例如?00 100 英鎊可表示為英鎊可表示為 100100。3.3 3.3 數(shù)據(jù)

10、定義功能數(shù)據(jù)定義功能l3.3.1 3.3.1 基本表基本表l3.3.2 3.3.2 數(shù)據(jù)完整性約束數(shù)據(jù)完整性約束3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l3.3.1 基本表基本表定義基本表定義基本表修改基本表修改基本表刪除基本表刪除基本表3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l定義基本表定義基本表使用使用CREATE TABLE語句實現(xiàn),語句實現(xiàn),語法格式:語法格式:CREATE TABLE ( 列級完整性約束定義列級完整性約束定義, 列級完整性約束定義列級完整性約束定義 , 表級完整性約束定義表級完整性約束定義 ) 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l在列級完整性約束定義處可以定義的

11、約束在列級完整性約束定義處可以定義的約束NOT NULL:限制列取值非空。DEFAULT:給定列的默認(rèn)值。UNIQUE:限制列取值不重。CHECK:限制列的取值范圍。PRIMARY KEY:指定本列為主鍵。FOREIGN KEY:定義本列為引用其他表的外鍵。使用形式為:FOREIGN KEY()REFERENCES ()3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l幾點(diǎn)說明幾點(diǎn)說明NOT NULL和和DEFAULT只能是列級完整性約束;只能是列級完整性約束;其他約束均可在表級完整性約束處定義。其他約束均可在表級完整性約束處定義。注意以下幾點(diǎn):注意以下幾點(diǎn): 如果如果CHECK約束是定義多列之間的取

12、值約束,則只能在約束是定義多列之間的取值約束,則只能在表級完整性約束處定義;表級完整性約束處定義; 如果表的如果表的主鍵主鍵由多個列組成,則也只能在表級完整性約束由多個列組成,則也只能在表級完整性約束處定義,并將主鍵列用括號括起來,即:處定義,并將主鍵列用括號括起來,即:PRIMARY KEY(列(列1,列,列2 );); 如果在表級完整性約束處定義如果在表級完整性約束處定義外鍵外鍵,則,則“FOREIGN KEY ()”部分不能省。部分不能省。3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l約束定義約束定義 列取值非空約束列取值非空約束 NOT NULL 例例: sname char(10) NO

13、T NULL3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l約束定義約束定義 表主鍵約束 在定義列時定義主鍵(僅用于單列主鍵)在定義列時定義主鍵(僅用于單列主鍵)列定義列定義 PRIMARY KEY例:例: SNO char(7) PRIMARY KEY 在定義完列時定義主鍵(用于單列或多列主在定義完列時定義主鍵(用于單列或多列主鍵)鍵)PRIMARY KEY () 例:例: PRIMARY KEY(SNO) PRIMARY KEY(SNO,CNO)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l約束定義約束定義外鍵引用約束外鍵引用約束 指明本表外鍵列引用的表及表中的主鍵列。指明本表外鍵列引用的表及表中的

14、主鍵列。 FOREIGN KEY ()REFERENCES () 例:例: FOREIGN KEY (sno) REFERENCES 學(xué)生表(學(xué)生表(sno)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lStudent表結(jié)構(gòu)表結(jié)構(gòu)列名列名含義含義數(shù)據(jù)類型數(shù)據(jù)類型約束約束Sno學(xué)號CHAR(7)主碼Sname姓名NCHAR(5)非空Ssex性別NCHAR(1)Sage年齡TINYINTSdept所在系NVARCHAR(20)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l定義定義Student表表CREATE TABLE Student ( Sno CHAR(7) PRIMARY KEY, Sname N

15、CHAR(5) NOT NULL, Ssex NCHAR(1), Sage TINYINT, Sdept NVARCHAR(20) )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lCourse表結(jié)構(gòu)表結(jié)構(gòu)列列 名名含含 義義數(shù)數(shù) 據(jù)據(jù) 類類 型型約約 束束Cno課程號CHAR(6)主鍵Cname課程名NVARCHAR(20)非空Ccredit學(xué)分TINYINTSemster學(xué)期TINYINT3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l定義定義Course表表CREATE TABLE Course ( Cno CHAR(6) PRIMARY KEY, Cname NVARCHAR(20) NOT NU

16、LL, Ccredit TINYINT, Semester TINYINT)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lSC表結(jié)構(gòu)表結(jié)構(gòu)列列 名名 含含 義義數(shù)數(shù) 據(jù)據(jù) 類類 型型約約 束束Sno學(xué)號CHAR(7)主鍵,引用Student的外鍵Cno課程號 CHAR(6)主鍵,引用Course的外鍵Grade 成績TINYINT3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l定義定義SC表表CREATE TABLE SC ( Sno CHAR(7) NOT NULL, Cno CHAR(6) NOT NULL, Grade TINYINT, PRIMARY KEY ( Sno, Cno ), FORE

17、IGN KEY ( Sno ) REFERENCES Student ( Sno ), FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) ) 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l修改基本表結(jié)構(gòu)修改基本表結(jié)構(gòu)在定義基本表之后,如果需求有變化,在定義基本表之后,如果需求有變化,比如添加列、刪除列或修改列定義,可以比如添加列、刪除列或修改列定義,可以使用使用ALTER TABLE語句實現(xiàn)。語句實現(xiàn)。ALTER TABLE語句可以對表添加列、刪語句可以對表添加列、刪除列、修改列的定義,也可以添加和刪除除列、修改列的定義,也可以添加和刪除約束。約束。3.3

18、 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lALTER TABLE語句語法語句語法ALTER TABLE ALTER COLUMN | ADD 約束約束| DROP COLUMN | ADD constraint 約束名約束名 約束定義約束定義| DROP constraint 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例例1為為SC表添加表添加“修課類別修課類別”列,此列列,此列的列名為的列名為Type,數(shù)據(jù)類型為,數(shù)據(jù)類型為NCHAR(2),允許空允許空。 ALTER TABLE SC ADD Type NCHAR(2) NULL3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例例2將新

19、添加的將新添加的Type列的數(shù)據(jù)類型改為列的數(shù)據(jù)類型改為NCHAR(4)。 ALTER TABLE SC ALTER COLUMN Type NCHAR(4)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例例3.刪除刪除SC表的表的Type列。列。 ALTER TABLE SC DROP COLUMN Type3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l刪除基本表刪除基本表當(dāng)確信不再需要某個表時,可以將其刪除。當(dāng)確信不再需要某個表時,可以將其刪除。刪除表的語句格式為:刪除表的語句格式為:DROP TABLE , 例:刪除例:刪除test表:表:DROP TABLE test3.3 3.3 數(shù)

20、據(jù)定義功能數(shù)據(jù)定義功能l3.3.2 數(shù)據(jù)完整性約束數(shù)據(jù)完整性約束完整性約束條件的作用對象完整性約束條件的作用對象 實現(xiàn)數(shù)據(jù)完整性實現(xiàn)數(shù)據(jù)完整性 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l完整性約束條件的作用對象完整性約束條件的作用對象完整性檢查是圍繞完整性約束條件進(jìn)行完整性檢查是圍繞完整性約束條件進(jìn)行的,因此,完整性約束條件是完整性控制的,因此,完整性約束條件是完整性控制機(jī)制的核心。完整性約束條件的作用對象機(jī)制的核心。完整性約束條件的作用對象可以是表、元組和列??梢允潜?、元組和列。 列級約束列級約束 元組約束元組約束 關(guān)系約束關(guān)系約束3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l列級約束列級約束列

21、級約束主要是對列的類型、取值范圍、精度等的列級約束主要是對列的類型、取值范圍、精度等的約束,具體包括:約束,具體包括:對對數(shù)據(jù)類型數(shù)據(jù)類型的約束:包括數(shù)據(jù)類型、長度、精度等。的約束:包括數(shù)據(jù)類型、長度、精度等。對對數(shù)據(jù)格式數(shù)據(jù)格式的約束:如規(guī)定學(xué)號的前兩位表示學(xué)生的約束:如規(guī)定學(xué)號的前兩位表示學(xué)生的入學(xué)年份,第三位表示系的編號,第四位表示專的入學(xué)年份,第三位表示系的編號,第四位表示專業(yè)編號,第五位代表班的編號等等。業(yè)編號,第五位代表班的編號等等。對對取值范圍取值范圍的約束:如學(xué)生的成績?nèi)≈捣秶鸀榈募s束:如學(xué)生的成績?nèi)≈捣秶鸀?100。對對空值空值的約束。的約束。3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)

22、定義功能l元組約束元組約束元組的約束是元組中各個字段之間的聯(lián)系的元組的約束是元組中各個字段之間的聯(lián)系的約束,約束,如:如: 開始日期小于結(jié)束日期開始日期小于結(jié)束日期 某項工作的最低工資小于最高工資某項工作的最低工資小于最高工資3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l關(guān)系約束關(guān)系約束指若干元組之間、關(guān)系之間的聯(lián)系的約束。指若干元組之間、關(guān)系之間的聯(lián)系的約束。比如比如: 學(xué)生表中學(xué)號的取值不能重復(fù)也不能取空值,學(xué)生表中學(xué)號的取值不能重復(fù)也不能取空值, 學(xué)生修課表中的學(xué)號的取值受學(xué)生表中的學(xué)號取學(xué)生修課表中的學(xué)號的取值受學(xué)生表中的學(xué)號取值的約束值的約束 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l實

23、現(xiàn)數(shù)據(jù)完整性實現(xiàn)數(shù)據(jù)完整性實現(xiàn)數(shù)據(jù)完整性一般在服務(wù)器端完成。實現(xiàn)數(shù)據(jù)完整性一般在服務(wù)器端完成。在服務(wù)器端實現(xiàn)數(shù)據(jù)完整性的方法主要有兩種。在服務(wù)器端實現(xiàn)數(shù)據(jù)完整性的方法主要有兩種。 一種是在定義表時聲明數(shù)據(jù)完整性,采用這種方一種是在定義表時聲明數(shù)據(jù)完整性,采用這種方法時可以在定義表的同時定義完整性約束,也可法時可以在定義表的同時定義完整性約束,也可以在定義表之后添加這些約束。以在定義表之后添加這些約束。 一種是在服務(wù)器端編寫觸發(fā)器來實現(xiàn)數(shù)據(jù)完整性。一種是在服務(wù)器端編寫觸發(fā)器來實現(xiàn)數(shù)據(jù)完整性。 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l實現(xiàn)約束實現(xiàn)約束1. PRIMARY KEY 約束約束2. U

24、NIQUE 約束約束3. FOREIGN KEY 約束約束4. DEFAULT 約束約束5. CHECK 約束約束3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l工作表結(jié)構(gòu)工作表結(jié)構(gòu) CREATE TABLE 工作表工作表( 工作編號工作編號 CHAR(6) NOT NULL, 最低工資最低工資 NUMERIC(7,2), 最高工資最高工資 NUMERIC(7,2) )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l職工表結(jié)構(gòu)職工表結(jié)構(gòu) CREATE TABLE 職工表職工表( 職工編號職工編號 CHAR(7) NOT NULL, 姓名姓名 NCHAR(5) NOT NULL, 工作編號工作編號 CHAR

25、(6), 工資工資 NUMERIC(7,2), 電話號碼電話號碼 CHAR(8) )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lPRIMARY KEY 約束約束保證實體完整性。保證實體完整性。 每個表有且只有一個每個表有且只有一個PRIMARY KEY 約束。約束。 格式:格式:ALTER TABLE 表名表名 ADD CONSTAINT 約束名約束名 PRIMARY KEY ( 列名列名 , n )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例:對職工表和工作表分別添加主鍵約束。例:對職工表和工作表分別添加主鍵約束。ALTER TABLE 職工表 ADD CONSTRAINT PK_EM

26、P PRIMARY KEY (職工編號)ALTER TABLE 工作表 ADD CONSTRAINT PK_JOB PRIMARY KEY (工作編號)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lUNIQUE 約束約束確保在非主鍵列中不輸入重復(fù)值。確保在非主鍵列中不輸入重復(fù)值。 應(yīng)用在客觀具有唯一性質(zhì)的列上,如身份證應(yīng)用在客觀具有唯一性質(zhì)的列上,如身份證號、社會保險號等。號、社會保險號等。注意事項:注意事項: 允許有一個空值。允許有一個空值。 在一個表中可以定義多個在一個表中可以定義多個UNIQUE約束。約束。 可以在一個列或多個列上定義可以在一個列或多個列上定義UNIQUE約束。約束。3.3

27、3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l添加添加UNIQUE約束約束語法格式:語法格式:ALTER TABLE 表名表名 ADD CONSTRAINT 約束名約束名 UNIQUE( , n )為職工表的為職工表的“電話號碼電話號碼”列添加列添加UNIQUE約約束。束。ALTER TABLE 職工表職工表 ADD CONSTRAINT UK_SID UNIQUE(電話號碼)(電話號碼)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lFOREIGN KEY約束約束實現(xiàn)了參照完整性。實現(xiàn)了參照完整性。 外鍵所引用的列必須是有外鍵所引用的列必須是有PRIMARY KEY約約束或束或UNIQUE約束的列。約束的列。

28、 格式:格式:ALTER TABLE ALTER TABLE 表名表名 ADD CONSTRAINT ADD CONSTRAINT 約束名約束名 FOREIGN KEY FOREIGN KEY( ) REFERENCES REFERENCES 引用表名(引用表名( )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例為職工表的工作編號添加外鍵引用約束,例為職工表的工作編號添加外鍵引用約束,此列引用工作表的工作編號列。此列引用工作表的工作編號列。ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT FK_job_idADD CONSTRAINT FK_jo

29、b_id FOREIGN KEY FOREIGN KEY(工作編號)(工作編號) REFERENCES REFERENCES 工作表(工作編號)工作表(工作編號)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lDEFAULT約束約束用于提供列的默認(rèn)值,用于提供列的默認(rèn)值,一個列只能有一個默認(rèn)值約束,一個默認(rèn)值一個列只能有一個默認(rèn)值約束,一個默認(rèn)值約束只能用在一個列上。約束只能用在一個列上。在向表中插入數(shù)據(jù)時系統(tǒng)檢查在向表中插入數(shù)據(jù)時系統(tǒng)檢查DEFAULT約約束。束。 格式:格式:ALTER TABLE 表名表名 ADD CONSTRAINT 約束名約束名 DEFAULT 默認(rèn)值默認(rèn)值 FOR 列名列

30、名3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例定義職工表的工資的默認(rèn)值為例定義職工表的工資的默認(rèn)值為10001000。ALTER TABLE ALTER TABLE 職工表職工表 ADD CONSTRAINT DF_SALARYADD CONSTRAINT DF_SALARY DEFAULT 1000 FOR DEFAULT 1000 FOR 工資工資3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能lCHECK約束約束用于將列的取值限制在指定的范圍內(nèi),使數(shù)用于將列的取值限制在指定的范圍內(nèi),使數(shù)據(jù)庫中存放的值都是有意義的。據(jù)庫中存放的值都是有意義的。 在執(zhí)行在執(zhí)行INSERT和和UPDATE語句

31、時系統(tǒng)自動語句時系統(tǒng)自動檢查檢查CHECK約束。約束??杉s束同一個表中多個列之間的取值關(guān)系??杉s束同一個表中多個列之間的取值關(guān)系。格式:格式:ALTER TABLE 表名表名 ADD CONSTRAINT 約束名約束名 CHECK (邏輯表達(dá)式)(邏輯表達(dá)式)3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例例1 1添加限制最工作表中低工資必須大于添加限制最工作表中低工資必須大于等于等于800800元的約束。元的約束。ALTER TABLE 工作表工作表 ADD CONSTRAINT CHK_Salary CHECK ( 最低工資最低工資 = 800 )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功

32、能l示例示例例例2 2限制工作表的最高工資大于等于最低限制工作表的最高工資大于等于最低工資的約束工資的約束 。ALTER TABLE ALTER TABLE 工作表工作表 ADD CONSTRAINT CHK_Job_SalaryADD CONSTRAINT CHK_Job_Salary CHECK ( CHECK ( 最高工資最高工資 = = 最低工資最低工資 ) )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l示例示例例例3. 添加限制職工表的電話號碼的每添加限制職工表的電話號碼的每1 1位的位的取值均是取值均是0 09 9的數(shù)字的約束。的數(shù)字的約束。 ALTER TABLE 職工表職工表 A

33、DD CONSTRAINT CHK_Emp_Phone CHECK (電話號碼電話號碼 LIKE 0-90-90-90-90-90- 90-90-9) 3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l工作表的完整定義工作表的完整定義 CREATE TABLE 工作表工作表( 工作編號工作編號 CHAR(6) NOT NULL PRIMARY KEY, 最低工資最低工資 NUMERIC(7,2) CHECK (最低工資最低工資 = 800), 最高工資最高工資 NUMERIC(7,2), CHECK (最高工資最高工資 = 最低工資最低工資) )3.3 3.3 數(shù)據(jù)定義功能數(shù)據(jù)定義功能l職工表的完整定

34、義職工表的完整定義CREATE TABLE 職工表職工表( 職工編號職工編號 CHAR(7) NOT NULL PRIMARY KEY, 姓名姓名 NCHAR(5) NOT NULL, 工作編號工作編號 CHAR(6), 工資工資 NUMERIC(7,2) DEFAULT 1000, 電話號碼電話號碼 CHAR(8) UNIQUE , CHECK (電話號碼電話號碼 LIKE 0-90-90-90-90-90-90-90-9), FOREIGN KEY(工作編號工作編號) REFERENCES工作表工作表(工作編號工作編號)3.4 3.4 索引索引l3.4.1 基本概念l3.4.2 索引分類l

35、3.4.3 創(chuàng)建和刪除索引3.4 3.4 索引索引l基本概念索引與圖書中的目錄類似。索引與圖書中的目錄類似。在數(shù)據(jù)庫中,索引使對數(shù)據(jù)的查找不需要對整個表在數(shù)據(jù)庫中,索引使對數(shù)據(jù)的查找不需要對整個表進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。進(jìn)行掃描,就可以在其中找到所需數(shù)據(jù)。圖書的目錄注明了各部分內(nèi)容所對應(yīng)的頁碼,而數(shù)圖書的目錄注明了各部分內(nèi)容所對應(yīng)的頁碼,而數(shù)據(jù)庫中的索引是一個表中所包含的值的列表,其中據(jù)庫中的索引是一個表中所包含的值的列表,其中注明了表中的各行數(shù)據(jù)所在的存儲位置。注明了表中的各行數(shù)據(jù)所在的存儲位置??梢詾楸碇械膯蝹€列建立索引,也可以為一組列建可以為表中的單個列建立索引,也可以為一組

36、列建立索引。立索引。索引由索引項組成,索引項由來自表中每一行的一索引由索引項組成,索引項由來自表中每一行的一個或多個列(稱為索引關(guān)鍵字)組成。個或多個列(稱為索引關(guān)鍵字)組成。當(dāng)在多個列上建立索引時,系統(tǒng)按索引列出現(xiàn)的先當(dāng)在多個列上建立索引時,系統(tǒng)按索引列出現(xiàn)的先后順序?qū)λ饕羞M(jìn)行排序。后順序?qū)λ饕羞M(jìn)行排序。索引及數(shù)據(jù)間對應(yīng)關(guān)系索引及數(shù)據(jù)間對應(yīng)關(guān)系3.4 3.4 索引索引l索引分類索引分類聚集索引聚集索引 數(shù)據(jù)按索引列進(jìn)行物理排序,數(shù)據(jù)按索引列進(jìn)行物理排序, 類似于電話號碼簿。類似于電話號碼簿。 對經(jīng)常要搜索連續(xù)范圍的值的列特別有效。對經(jīng)常要搜索連續(xù)范圍的值的列特別有效。非聚集索引非聚集索引

37、 與圖書的目錄類似。與圖書的目錄類似。 數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方,數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方,索引帶有指向數(shù)據(jù)存儲位置的指針。索引帶有指向數(shù)據(jù)存儲位置的指針。 索引中的索引項按索引鍵值順序存儲。索引中的索引項按索引鍵值順序存儲。3.4 3.4 索引索引非聚集索引可以在有聚集索引的表和無聚集非聚集索引可以在有聚集索引的表和無聚集索引的表上定義。索引的表上定義??梢栽谝粋€表上建立多個非聚集索引(可以在一個表上建立多個非聚集索引(SQL Server 2000支持在一個表上最多建立支持在一個表上最多建立249個個非聚集索引)。非聚集索引)??梢詾樵诒碇胁檎覕?shù)據(jù)時常用的每個列創(chuàng)建可以為在表

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論