Oracle 數(shù)據(jù)庫(kù)管理與應(yīng)用:第4章表的創(chuàng)建與管理_第1頁(yè)
Oracle 數(shù)據(jù)庫(kù)管理與應(yīng)用:第4章表的創(chuàng)建與管理_第2頁(yè)
Oracle 數(shù)據(jù)庫(kù)管理與應(yīng)用:第4章表的創(chuàng)建與管理_第3頁(yè)
Oracle 數(shù)據(jù)庫(kù)管理與應(yīng)用:第4章表的創(chuàng)建與管理_第4頁(yè)
Oracle 數(shù)據(jù)庫(kù)管理與應(yīng)用:第4章表的創(chuàng)建與管理_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第4章 表的創(chuàng)建與管理本章要點(diǎn)基本數(shù)據(jù)類(lèi)型1表的創(chuàng)建、修改和刪除 2插入更新與刪除表中的數(shù)據(jù) 33數(shù)據(jù)完整性的實(shí)施方法 444.1 創(chuàng)建表4.1.1 基本數(shù)據(jù)類(lèi)型 1字符數(shù)據(jù)類(lèi)型 CHAR(n):用于存儲(chǔ)長(zhǎng)度為n的定長(zhǎng)字符串,最大長(zhǎng)度為2000字節(jié),未指定長(zhǎng)度時(shí)默認(rèn)為1。 VARCHAR2(n):用于存儲(chǔ)長(zhǎng)度為n的變長(zhǎng)字符串,最大長(zhǎng)度為4000字節(jié),該類(lèi)型沒(méi)有默認(rèn)長(zhǎng)度,使用時(shí)必須指定。 NCHAR(n):用于存儲(chǔ)長(zhǎng)度為n的定長(zhǎng)的Unicode字符集數(shù)據(jù),最大長(zhǎng)度為2000字節(jié)。國(guó)家字符集的NCHAR類(lèi)型的1位既可以存儲(chǔ)一個(gè)字母(或其他符號(hào))也可以存儲(chǔ)一個(gè)漢字。NVARCHAR2(n):用于存儲(chǔ)

2、長(zhǎng)度為n的變長(zhǎng)的Unicode字符集數(shù)據(jù),最大長(zhǎng)度為4000字節(jié)。2數(shù)值數(shù)據(jù)類(lèi)型NUMBER(p,s):其中p是精度,表示總的有效數(shù)字的個(gè)數(shù);s是小數(shù)位數(shù)。NUMBER(p):精度為p的整數(shù)。NUMBER:如果沒(méi)有指明精度和小數(shù)位數(shù),則表示精度為38的浮點(diǎn)數(shù)。3日期數(shù)據(jù)類(lèi)型DATE:用于存儲(chǔ)日期和時(shí)間格式的數(shù)據(jù)。通常為DD-MON-YY格式表示。(可以使用函數(shù)SYSDATE獲得當(dāng)前的日期和時(shí)間)TIMESTAMP:時(shí)間戳類(lèi)型,與DATE數(shù)據(jù)類(lèi)型不同。TIMESTAMP可以包含小數(shù)秒(fractional second),帶小數(shù)秒的TIMESTAMP在小數(shù)點(diǎn)右邊最多可以保留9位。 4LOB數(shù)據(jù)類(lèi)

3、型LOB(Large Object)數(shù)據(jù)類(lèi)型存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),比如二進(jìn)制文件、圖形文件,或其他外部文件。LOB 可以存儲(chǔ)到4G字節(jié)大小。數(shù)據(jù)可以存儲(chǔ)到數(shù)據(jù)庫(kù)中也可以存儲(chǔ)到外部數(shù)據(jù)文件中。LOB數(shù)據(jù)類(lèi)型有以下幾種:BLOB:存儲(chǔ)二進(jìn)制大對(duì)象,可以是圖像、音頻文件以及視頻文件。CLOB:存儲(chǔ)字符大對(duì)象。BFILE:存儲(chǔ)外部二進(jìn)制文件,文件的大小由操作系統(tǒng)決定。4.1.2 使用OEM工具創(chuàng)建表 使用OEM工具創(chuàng)建表:在OEM主界面中選擇“管理”選項(xiàng)卡,出現(xiàn)如圖4-1所示的數(shù)據(jù)庫(kù)管理界面,在此界面上選擇“方案”中的“表”選項(xiàng) 。4.1.3 使用SQL命令創(chuàng)建表 使用SQL命令創(chuàng)建表:CREATE TA

4、BLE schema.table_name(column_name datatype DEFAULT expressioncolumn_constraint,n) 例4.1 在當(dāng)前方案中創(chuàng)建一個(gè)名為student的表,包括學(xué)號(hào)(studentID)、姓名(name)、性別(sex)、出生日期(birthday)四個(gè)字段。 CREATE TABLE student(studentID CHAR(6),name VARCHAR2(8),sex CHAR(2),birthday DATE)TABLESPACE users; 4.1.4 基于已有的表創(chuàng)建新表 CREATE TABLE table_na

5、me(column_name1,column_name2,)AS subquery其中各參數(shù)的意義如下:column_name:新表的字段名,可以省略。若省略,則新表的字段名與查詢(xún)結(jié)果集中包含的字段同名。用戶(hù)可以修改新表中的字段名,但不能修改字段的數(shù)據(jù)類(lèi)型和寬度。subquery:是指子查詢(xún)的SELECT語(yǔ)句。例4.2 將scott方案下的emp表復(fù)制到當(dāng)前方案中的emp_new表。 CREATE TABLE emp_newAS SELECT * FROM scott.emp; 例4.3 在當(dāng)前方案中創(chuàng)建新的雇員表,包括雇員編號(hào)、姓名、工作三個(gè)字段,內(nèi)容來(lái)源于scott方案中的emp表的emp

6、no、ename、job三個(gè)字段。 CREATE TABLE 雇員(編號(hào),姓名,工作)AS SELECT empno,ename,job FROM scott.emp; 4.1.5 定義表中字段的默認(rèn)值 在使用CREATE TABLE 命令創(chuàng)建新表時(shí)可以指定字段的默認(rèn)值。字段指定了默認(rèn)值后,當(dāng)使用INSERT語(yǔ)句向表中插入新數(shù)據(jù)時(shí),若該字段未指定值,那么Oracle將自動(dòng)為該字段插入默認(rèn)值。每個(gè)字段只能設(shè)置一個(gè)默認(rèn)值。例4.4 重新創(chuàng)建student表,并將性別(sex)字段設(shè)置默認(rèn)值為男。CREATE TABLE student(studentID CHAR(6),name VARCHAR2

7、(8),sex CHAR(2) DEFAULT 男,birthday DATE); 4.1.6 使用DESCRIBE命令查看表結(jié)構(gòu) 使用DESCRIBE命令查看表結(jié)構(gòu),語(yǔ)法格式如下:DESCRIBE schema.object_name例4.5 顯示student表的表結(jié)構(gòu)。DESC student;4.2 向表中插入、修改和刪除數(shù)據(jù) 實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的前提是向表中插入數(shù)據(jù),沒(méi)有數(shù)據(jù)的表只是一個(gè)空的表結(jié)構(gòu),沒(méi)有任何實(shí)際意義。向表中插入數(shù)據(jù)后,可以根據(jù)用戶(hù)的需要進(jìn)行數(shù)據(jù)的修改和刪除操作。4.2.1 插入數(shù)據(jù) 1插入單行數(shù)據(jù) INSERT語(yǔ)句可以向表中插入數(shù)據(jù),語(yǔ)法格式如下:INSERT INTO t

8、able_name( column_name ,n ) VALUES ( expression | NULL | DEFAULT ,n )其中各參數(shù)的意義如下:table_name:要插入數(shù)據(jù)的表名。column_name:要插入數(shù)據(jù)的字段名。如果向表中的所有字段插入數(shù)據(jù),則字段列表可以省略。expression:為相應(yīng)位置的column_name字段指定值的表達(dá)式。 如果向表中插入的是常量數(shù)據(jù),那么需要注意:數(shù)值型常量,可以直接插入數(shù)據(jù)。字符型和日期型常量插入時(shí)需要加單引號(hào)。日期型常量的默認(rèn)格式為:dd-mm月-yyyy,例如:10-7月-2010表示2010年7月10號(hào)。例4.6 向stu

9、dent表中插入一條完整的記錄。INSERT INTO student(studentID,name,sex,birthday)VALUES(201001,張三,男,11-5月-1990);或INSERT INTO studentVALUES(201001,張三,男,11-5月-1990); 例4.7 向student表中插入一條記錄,只給出部分字段值。INSERT INTO student(studentID,name)VALUES(201002,李四);或INSERT INTO studentVALUES(201002,李四,default,null); 2插入多行數(shù)據(jù) 插入多行數(shù)據(jù)。語(yǔ)法

10、格式如下:INSERT INTO dest_table_name ( column_name ,n ) SELECT column_name ,nFROM source_table_name WHERE search_conditions 例4.8 創(chuàng)建employee1表,包含三個(gè)字段empidID、empname和empjob。將例4.3雇員表中的所有雇員信息插入到employee1表中。CREATE TABLE employee1(empID NUMBER(4),empname VARCHAR2(10),empjob CHAR(9);INSERT INTO employee1SELECT

11、 * FROM 雇員; 4.2.2 修改數(shù)據(jù) 修改數(shù)據(jù):UPDATE table_nameSET column_name1=expression1 ,column_name2=expression2| (column_name1,column_name2,)=subquery WHERE search_conditions 其中各參數(shù)的意義如下:table_name:要更新數(shù)據(jù)的表名。column_name:要修改數(shù)據(jù)的字段名。expression:更新后的數(shù)據(jù)值。subquery:SELECT子查詢(xún)作為字段的新值。search_conditions:更新條件,只對(duì)表中滿(mǎn)足該條件的記錄進(jìn)行更新

12、。省略該項(xiàng)時(shí),將更新表中所有的行。例4.9 將scott方案下的emp表中編號(hào)為7369的雇員的工作修改為SALESMAN。UPDATE scott.empSET job=SALESMANWHERE empno=7369; 例4.10 將scott方案下的emp表中編號(hào)為7369的雇員的工作改為與編號(hào)7902雇員的工作相同。UPDATE scott.empSET job=(SELECT job FROM scott.emp WHERE empno=7902)WHERE empno=7369;例4.11 將scott方案下的emp表中工作為SALESMAN的雇員工資都增加5%。UPDATE sc

13、ott.empSET sal=sal+(sal*0.05)WHERE job=SALESMAN;4.2.3 刪除數(shù)據(jù) 常用的刪除命令包括DELETE和TRUNCATE TABLE,二者的區(qū)別是:DELETE命令是邏輯刪除,只是將要?jiǎng)h除的行加上刪除標(biāo)記,被刪除后可以使用ROLLBACK命令回滾,刪除操作時(shí)間較長(zhǎng);TRUNCATE TABLE命令是物理刪除,將表中的數(shù)據(jù)永久刪除,不能回滾,刪除操作快。DELETE命令包含WHERE子句,可以刪除表中的部分行;TRUNCATE TABLE命令只能刪除表中的所有行。 1DELETE命令 用來(lái)刪除表中數(shù)據(jù),語(yǔ)法格式如下:DELETE FROM table

14、_name WHERE search_conditions其中各參數(shù)的意義如下:table_name:要?jiǎng)h除記錄的表名。search_conditions:刪除表中符合search_conditions條件的記錄,缺省WHERE子句時(shí),則刪除該表中的所有數(shù)據(jù) DELETE FROM scott.empWHERE job=SALESMAN;-查詢(xún)工作為SALESMAN的雇員記錄。SELECT * FROM scott.emp WHERE job=SALESMAN; -看不到符合條件的記錄-使用ROLLBACK命令回滾刪除操作,再執(zhí)行查詢(xún)ROLLBACK; 回退前應(yīng)先commit;否則會(huì)退到表創(chuàng)建

15、的時(shí)候的數(shù)據(jù)存儲(chǔ)情況。SELECT * FROM scott.emp WHERE job=SALESMAN; -刪除操作被撤銷(xiāo),數(shù)據(jù)被回滾 2TRUNCATE TABLE 命令 這個(gè)命令所做的修改不能回滾,對(duì)于已經(jīng)刪除的記錄不能恢復(fù),語(yǔ)法格式如下:TRUNCATE TABLE table_name例4.13 永久刪除雇員表中的所有記錄。TRUNCATE TABLE 雇員;4.3 修改表與刪除表 4.3.1 修改表 1使用OEM工具修改表結(jié)構(gòu) 2使用SQL命令修改表結(jié)構(gòu) 使用SQL命令修改表結(jié)構(gòu)ALTER TABLE schematable_nameADD (column_name dataty

16、pe DEFAULT expressioncolumn_constraint,n)| DROP COLUMN column_name| DROP (coloumn_name1,column_name2,n)| MODIFY (column_name new_datatype DEFAULT expressioncolumn_constraint,n)| RENAME COLUMN column_name TO new_cloumn_name| RENAME TO new_table_name 其中各參數(shù)的意義如下:schema:要修改的表所屬的方案名稱(chēng)。table_name:要修改的表名稱(chēng)。A

17、DD:向表中添加新字段。DROP:從表中刪除字段。當(dāng)刪除一個(gè)字段時(shí),必須在字段名前加上COLUMN關(guān)鍵字;當(dāng)刪除的是多個(gè)字段時(shí),則需要將多個(gè)字段放在括號(hào)中,中間用逗號(hào)隔開(kāi),并且不能使用COLUMN關(guān)鍵字。MODIFY:修改已有字段的定義。RENAME COLUMN:修改字段的名稱(chēng)。RENAME:修改表的名稱(chēng)。 例4.14 向student表中添加 所在系sdept字段。ALTER TABLE studentADD sdept VARCHAR2(10);-可以使用DESC命令查看修改后的表結(jié)構(gòu)DESC student; 例4.15 向employee1表中添加性別sex,年齡age,工資sala

18、ry三個(gè)字段。ALTER TABLE employee1ADD(sex CHAR(2),age INT,salary NUMBER(5,2);例4.16 刪除employee1表中的性別字段。ALTER TABLE employee1DROP COLUMN sex;例4.17 刪除employee1表中的年齡和工資字段。ALTER TABLE employee1DROP (age,salary); 例4.18 修改student表中所在系sdept字段的長(zhǎng)度改為30。ALTER TABLE studentMODIFY sdept VARCHAR2(30);注意:在修改字段的長(zhǎng)度時(shí),如果增加長(zhǎng)度

19、,那么無(wú)任何限制。但是,如果縮減長(zhǎng)度,修改操作是否成功視情況而定。如果該字段無(wú)數(shù)據(jù)則允許縮減長(zhǎng)度,如果該字段已經(jīng)包含數(shù)據(jù),那么只有類(lèi)似VARCHAR2類(lèi)型的字段在長(zhǎng)度縮減后仍然能夠容納現(xiàn)有數(shù)據(jù)的前提下,可以縮減長(zhǎng)度。其他類(lèi)型,如CHAR、NUMBER等不能縮小長(zhǎng)度。例4.19 修改student表中所在系sdept字段的字段名為new_sdept。ALTER TABLE studentRENAME COLUMN sdept TO new_sdept;例4.20 將student表改名為new_student表。ALTER TABLE studentRENAME TO new_student;4

20、.3.2 刪除表 1 使用OEM工具刪除表 2 使用SQL命令刪除表使用SQL命令刪除表,語(yǔ)法格式如下:DROP TABLE table_name1,n例4.21 將new_student表刪除。DROP TABLE new_student;4.4 定義數(shù)據(jù)完整性 數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、一致性和安全性,它是衡量數(shù)據(jù)庫(kù)中數(shù)據(jù)質(zhì)量好壞的重要標(biāo)準(zhǔn)。 可以在表上創(chuàng)建約束。約束是保證數(shù)據(jù)完整性的標(biāo)準(zhǔn)方法,主要包括:主鍵約束(PRIMARY KEY)非空約束(NOT NULL)唯一約束(UNIQUE)檢查約束(CHECK)外鍵約束(FOREIGN KEY)從約束影響的字段個(gè)數(shù)上,可將約束進(jìn)一步分為:

21、列級(jí)約束:如果某個(gè)約束只作用于某個(gè)字段,則此約束為列級(jí)約束,可在此字段定義后面直接寫(xiě)出列級(jí)約束,也可以在所有字段定義完成后再定義列級(jí)約束。表級(jí)約束:如果某個(gè)約束作用于多個(gè)字段,則此約束為表級(jí)約束,必須在所有字段定義完成之后再定義表級(jí)約束。 1使用CREATE TABLE語(yǔ)句創(chuàng)建約束CREATE TABLE schema.table_name(column_name1 datatype DEFAULT expression, CONSTRAINT constraint_name constraint_define,column_name2 datatype DEFAULT expression,

22、 CONSTRAINT constraint_name constraint_define, , CONSTRAINT constraint_name constraint_define,. ) 加上逗號(hào),新約束可以影響前面所有的字段,不加逗號(hào),新約束只影響當(dāng)前字段其中各參數(shù)的意義如下:CONSTRAINT constraint_name:定義約束時(shí),可以在關(guān)鍵字CONSTRAINT后面給出約束的名字。該子句也可以省略。constraint_define:約束的定義語(yǔ)句,主要包括約束類(lèi)型的關(guān)鍵字和被約束的字段兩部分。2使用ALTER TABLE語(yǔ)句創(chuàng)建約束 ALTER TABLE table_

23、nameADD CONSTRAINT constraint_name constraint_define3. 使用ALTER TABLE語(yǔ)句還可刪除約束,其語(yǔ)法格式如下:ALTER TABLE table_nameDROP CONSTRAINT constraint_name4.4.1 定義主鍵約束 主鍵(PRIMARY KEY)用于唯一地標(biāo)識(shí)表中每一條記錄,可以實(shí)現(xiàn)表的實(shí)體完整性??梢远x表中的一列或多列為主鍵,定義為主鍵的一列或多列的組合值在任意兩行上都不能相同,即不能有重復(fù)值,并且任一個(gè)主屬性都不能為空。 一個(gè)表中只能定義一個(gè)主鍵約束1使用SQL命令創(chuàng)建主鍵約束 主鍵約束的定義語(yǔ)句如下:

24、 CONSTRAINT constraint_name PRIMARY KEY( col_name ,n) 注意:若主鍵約束直接定義在當(dāng)前字段的后面,則PRIMARY KEY后面的字段名必須省略。 見(jiàn)下例:例4.22 在當(dāng)前方案中創(chuàng)建一個(gè)名為student的表,包括學(xué)號(hào)(studentID)、姓名(name)、性別(sex)、出生日期(birthday)四個(gè)字段。其中學(xué)號(hào)(studentID)為主鍵。 CREATE TABLE student( studentID CHAR(6) PRIMARY KEY, name VARCHAR2(8), sex CHAR(2), birthday DATE

25、); 該例還可寫(xiě)成如下三種形式。形式一:CREATE TABLE student(studentID CHAR(6) CONSTRAINT pk_student PRIMARY KEY,name VARCHAR2(8),sex CHAR(2),birthday DATE); 該例在studentID字段上創(chuàng)建主鍵約束,約束名為pk_student 形式二:CREATE TABLE student(studentID CHAR(6), CONSTRAINT pk_student PRIMARY KEY(studentID),name VARCHAR2(8),sex CHAR(2),birthda

26、y DATE);約束的定義與字段的定義相互獨(dú)立,二者之間用逗號(hào)隔開(kāi),此時(shí)建立約束的字段名不能省略。 形式三:CREATE TABLE student(studentID CHAR(6), name VARCHAR2(8),sex CHAR(2),birthday DATE,PRIMARY KEY(studentID);所有的字段都定義完成后,再單獨(dú)定義約束。例4.23 在當(dāng)前方案中創(chuàng)建一個(gè)名為score的表,包括學(xué)號(hào)(studentID)、課程號(hào)(courseID)、分?jǐn)?shù)(grade)三個(gè)字段。其中學(xué)號(hào)(studentID)與課程號(hào)(courseID)的組合為主鍵。CREATE TABLE s

27、core(studentID CHAR(6),courseID CHAR(3),grade NUMBER(5,2),CONSTRAINT pk_score PRIMARY KEY(studentID,courseID); 注意組合主鍵的特點(diǎn):任意一列中的值可以重復(fù),但主鍵中的所有列的組合值必須唯一,而且組合中的每個(gè)字段都不能取空值。 例4.24 先在當(dāng)前方案中創(chuàng)建一個(gè)名為xs的表,包括學(xué)號(hào)(studentID)、姓名(name)、性別(sex)、出生日期(birthday)、身份證號(hào)(indentity)五個(gè)字段,然后通過(guò)修改表,對(duì)學(xué)號(hào)字段創(chuàng)建主鍵約束。CREATE TABLE xs(stud

28、entID CHAR(6),name VARCHAR2(8),sex CHAR(2),birthday DATE,indentity CHAR(18); 修改表,添加約束:ALTER TABLE xsADD CONSTRAINT pk_xs PRIMARY KEY(studentID);或者寫(xiě)成:ALTER TABLE xs ADD PRIMARY KEY(studentID);注意:在創(chuàng)建主鍵約束時(shí)系統(tǒng)會(huì)對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行檢查,若現(xiàn)有數(shù)據(jù)在該列上出現(xiàn)重復(fù)或空值,即現(xiàn)有數(shù)據(jù)已經(jīng)違反了主鍵約束的限制,那么此時(shí)系統(tǒng)會(huì)提示錯(cuò)誤信息,并拒絕執(zhí)行創(chuàng)建主鍵約束操作。 例4.25 刪除例4.24中創(chuàng)建的主鍵約束

29、。ALTER TABLE xsDROP CONSTRAINT pk_xs; -使用SQL語(yǔ)句查看表的約束select table_name,constraint_name,constraint_typefrom user_constraintswhere table_name=大寫(xiě)表名 2使用OEM工具創(chuàng)建主鍵約束 在OEM中選中需要添加主鍵約束的表,在表的“編輯”界面中單擊“約束條件”選項(xiàng)卡 在右側(cè)的下拉列表框選擇約束類(lèi)型,然后點(diǎn)“添加”按鈕。4.4.2 定義不允許為空約束 不允許為空(NOT NULL)約束只能定義為列級(jí)約束,即一個(gè)NOT NULL約束只能限制一個(gè)字段的取值不能為空,但一個(gè)

30、表中可以定義多個(gè)NOT NULL約束。 注意:NOT NULL約束的定義區(qū)別于其他約束的定義,該約束只能當(dāng)作字段的屬性直接定義在字段的后面 例4.26 創(chuàng)建一個(gè)名為course的課程表,包括課程號(hào)(courseID)、課程名(name)、學(xué)分(credit),要求課程號(hào),課程名不能為空,在課程號(hào)字段定義主鍵約束。CREATE TABLE course(courseID CHAR(3) PRIMARY KEY,name VARCHAR2(20) NOT NULL,credit NUMBER(3); 修改表時(shí)為字段定義NOT NULL約束 :ALTER TABLE course MODIFY cr

31、edit NOT NULL;Not null約束在修改表時(shí)當(dāng)作字段的屬性定義4.4.3 定義唯一約束 唯一(UNIQUE)約束用來(lái)限制表中的非主鍵列上的數(shù)據(jù)的唯一性,即表中非主鍵列不允許輸入重復(fù)值。一個(gè)表上可以定義多個(gè)UNIQUE約束。 唯一性約束和主鍵約束的區(qū)別:一個(gè)表只能定義一個(gè)PRIMARY KEY約束,而一個(gè)表可以定義多個(gè)UNIQUE約束。UNIQUE約束允許在該列上有NULL值,而PRIMARY KEY不允許有NULL值。 1使用SQL命令創(chuàng)建唯一約束創(chuàng)建唯一約束的語(yǔ)法格式如下: CONSTRAINT constraint_name UNIQUE( col_name ,n) 例4.2

32、7 重新創(chuàng)建course的課程表,包括課程號(hào)(courseID)、課程名(name)、學(xué)分(credit)字段。要求課程號(hào)字段定義主鍵約束,課程名字段定義唯一性約束。 DROP TABLE course; CREATE TABLE course (courseID CHAR(3) PRIMARY KEY, name VARCHAR2(20) UNIQUE, credit NUMBER(3); 例4.28 在例4.24的xs表的身份證字段上建立唯一性約束。ALTER TABLE xsADD CONSTRAINT un_identity UNIQUE(indentity) 4.4.4 定義檢查約束

33、 檢查(CHECK)約束用來(lái)指定某列的可取值的范圍,通過(guò)限制輸入到列中的值來(lái)強(qiáng)制域的完整性,即檢查輸入的每一個(gè)數(shù)據(jù),只有符合條件的數(shù)據(jù)才允許輸入到表中。CHECK約束的特點(diǎn):既可以定義為列級(jí)約束,也可以定義為表級(jí)約束可以在一個(gè)字段上定義多個(gè)CHECK約束創(chuàng)建檢查約束的語(yǔ)法格式如下: CONSTRAINT constraint_name CHECK (expression) 其中,表達(dá)式中可以包含關(guān)系運(yùn)算符、邏輯運(yùn)算符和IN、LIKE和BETWEEN等特殊運(yùn)算符,表達(dá)式的運(yùn)算結(jié)果是真或假的布爾值。 例4.29 重新創(chuàng)建學(xué)生表student,包含學(xué)號(hào)(studentID)、姓名(name)、性別(

34、sex)、年齡(age)以及所在系(sdept)五個(gè)字段,并在年齡字段創(chuàng)建一個(gè)CHECK約束,使得年齡的值在1830歲之間。DROP TABLE student;CREATE TABLE student(studentID CHAR(6) PRIMARY KEY, name VARCHAR2(8),sex CHAR (2), age number(3) CONSTRAINT ch_age CHECK (age=18 AND age=30), sdept varCHAR2(10); 例4.30 修改學(xué)生表student,在所在系sdept字段創(chuàng)建一個(gè)CHECK約束,以限制只能輸入有效的系名稱(chēng)。ALTER TABLE student ADD CONSTRAINT ch_sdeptCHECK(sdept IN(軟件工程系,計(jì)算機(jī)應(yīng)用系,網(wǎng)絡(luò)工程系); 4.4.5 定義外鍵約束 外鍵(FOREIGN KEY)約束用于與其他表(稱(chēng)為參照表,或父表)中的列(稱(chēng)為參照列)建立連接。通過(guò)將參照表中的主鍵所在列或具有唯一性約束的列包含在另一個(gè)表(稱(chēng)為子表)中,這些列就構(gòu)成了子表的外鍵。子表中的外鍵字段的取值只能在父表的參照列的值的范圍內(nèi),或者為空值。若父表的參照列的某個(gè)值被子表的外鍵引用,那么該值不能被刪除也不能被修改。 創(chuàng)建外鍵約束的語(yǔ)法格式如下:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論