第12講使用約束_第1頁
第12講使用約束_第2頁
第12講使用約束_第3頁
第12講使用約束_第4頁
第12講使用約束_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Oracle數(shù)據(jù)庫原理與應(yīng)用2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用第12講使用約束2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)任務(wù)1:定義表的列約束任務(wù)2:維護表的列約束2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用教學(xué)目標(biāo)1、學(xué)會定義表的列約束2、學(xué)會維護表的列約束知識目標(biāo):能力目標(biāo):1、非空約束2、唯一約束3、主鍵約束4、外鍵約束5、檢查約束6、復(fù)合約束2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表

2、的列約束任務(wù)1-1:定義非空約束任務(wù)1-2:定義唯一約束任務(wù)1-3:定義主鍵約束任務(wù)1-4:定義外鍵約束任務(wù)1-5:定義檢查約束任務(wù)1-6:定義復(fù)合約束2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束create table emp02( empno number(4) not null, ename varchar2(14) constraint nn_emp02_ename not null, job varchar2(20), comm number(7,2), deptno number(2);任務(wù)1-1:定義非空約束(not null)例:

3、建立表emp02,字段empno和ename非空,empno由Oracle自動分配約束名,ename指定約束名nn_name。Not null約束用于確保列不能為null。如果列上定義了not null,插入或修改列時,改列要提供數(shù)據(jù)。2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用使用數(shù)據(jù)字典視圖user_constraints查看約束:任務(wù)1:定義表的列約束任務(wù)1-1:定義非空約束(not null)select constraint_name,constraint_type from user_constraints where table_name=upper(e

4、mp02);使用數(shù)據(jù)字典視圖user_cons_columns查看約束對應(yīng)的表列:select column_name from user_cons_columns where constraint_name=upper(nn_emp02_ename);2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-1:定義非空約束(not null)測試:SQL insert into emp02 (empno,job,comm) values (1000,工程師,300)ORA-01400: 無法將 NULL 插入 (SCOTT.EMP02.ENAME)

5、2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-1:定義非空約束(not null)練習(xí):以scott用戶登錄test數(shù)據(jù)庫,建立表author01,表結(jié)構(gòu)如下:表名稱列名約束數(shù)據(jù)類型缺省值注釋Author01authornoNot nullNumber(3)anameNot nullVarchar2(10)salNumber(7,2)0deptnoNumber(2)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束create table dept02( deptno number(2) const

6、raint nn_deptno not null, dname varchar2(20) constraint uk_dept02_dname unique, loc varchar2(100), constraint uk_dept02_deptno unique(deptno);任務(wù)1-2:定義唯一約束(unique)例:建立部門表dept02,定義部門編號deptno為非空約束和唯一約束,部門名稱dname為唯一約束。唯一約束(unique)用于唯一的標(biāo)識數(shù)據(jù),定義了唯一約束后,唯一約束的列值不能重復(fù),但可以為空。2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)

7、1:定義表的列約束任務(wù)1-2:定義唯一約束(unique)測試:SQL insert into dept02 (deptno,dname,loc) values (10,銷售部,上海); 1 row inserted SQL / insert into dept02 (deptno,dname,loc) values (10,銷售部,上海)ORA-00001: 違反唯一約束條件 (SCOTT.UK_DEPT02_DNAME)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束練習(xí):建立作者單位表dept01,表結(jié)構(gòu)如下:表名稱列名約束數(shù)據(jù)類型缺省值注釋d

8、ept01deptnoNot nullNumber(2)dnameUniqueVarchar2(20)任務(wù)1-2:定義唯一約束(unique)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束create table dept03( deptno number(2) constraint pk_dept03_deptno primary key, dname varchar2(14), loc varchar2(100); 任務(wù)1-3:定義主鍵約束(primary key)例:創(chuàng)建dept03表,列deptno定義為主鍵約束唯一標(biāo)識表的行,主鍵約束的列

9、上不僅不能重復(fù),也不能為空。2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用測試:(1)insert into dept03 (deptno,dname,loc) values (10,研發(fā)部,上海); 1 row inserted (2)insert into dept03 (deptno,dname,loc) values (10,研發(fā)部,上海) ORA-00001: 違反唯一約束條件 (SCOTT.PK_DEPT03_DEPTNO) (3)insert into dept03 (dname,loc) values (研發(fā)部,上海); ORA-01400: 無法將 N

10、ULL 插入 (SCOTT.DEPT03.DEPTNO);任務(wù)1:定義表的列約束任務(wù)1-3:定義主鍵約束(primary key)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束練習(xí)1:以scott用戶登錄test數(shù)據(jù)庫,建立表author02,表結(jié)構(gòu)如下:任務(wù)1-3:定義主鍵約束(primary key)表名稱列名約束數(shù)據(jù)類型缺省值注釋Author02authornoPrimary key Number(3)anameNot nullVarchar2(10)salNumber(7,2)0deptnoNumber(2)練習(xí)2:建立作者單位表dept0

11、2,表結(jié)構(gòu)如下:表名稱列名約束數(shù)據(jù)類型缺省值注釋dept02deptnoPrimary keyNumber(2)dnameUniqueVarchar2(20)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-4:定義外鍵約束(foreign key)References選項用于指定主表名及其主鍵列。當(dāng)定義外部鍵約束時,該選項必須指定。例:創(chuàng)建表emp03,列deptno定義為外鍵,與dept02表主鍵列deptno關(guān)聯(lián)。create table emp03( empno number(4) constraint pk_emp03_empno p

12、rimary key, ename varchar2(10) constraint uk_emp03_ename not null, job varchar2(15), sal number(7,2) default 0.00, deptno number(7,2) constraint fk_emp03_deptno references dept02(deptno);2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-4:定義外鍵約束(foreign key)測試:(1)insert into emp03 (empno,ename,job,s

13、al,deptno) values (1234,郭永洪,系統(tǒng)分析員,3500,10); ORA-02291: 違反完整約束條件 (SCOTT.FK_EMP03_DEPTNO) - 未找到父項關(guān)鍵字 (2)insert into dept02 (deptno,dname,loc) values (10,上海,研發(fā)部);(3)重新執(zhí)行(1)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-4:定義外鍵約束(foreign key)練習(xí):建立表author03,列deptno與dept02表的列deptno建立主外鍵關(guān)系,表結(jié)構(gòu)如下:表名稱列名約束數(shù)

14、據(jù)類型缺省值注釋Author03authornoPrimary keyNumber(3)anameNot nullVarchar2(10)salNumber(7,2)0deptnoForeign keyNumber(2)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-5:定義檢查約束(check)Check約束用于強制列數(shù)據(jù)必須滿足條件。例:建立表bonus02,列名empno number(4),sal number(7,2),范圍0-10000,comm number(7,2),范圍0-5000。create table bonus02(

15、 empno number(4), sal number(7,2) constraint ck_bonus02_sal check (sal between 0.00 and 10000.00), comm number(7,2), constraint ck_bonus02_comm check (comm between 0.00 and 5000.00);2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-5:定義檢查約束(check)測試:SQLinsert into bonus02 (empno,sal,comm) values (12

16、35,15000.00,4000.00) ORA-02290: 違反檢查約束條件 (SCOTT.CK_BONUS02_SAL) SQLinsert into bonus02 (empno,sal,comm) values (1235,8000.00,6000.00) ORA-02290: 違反檢查約束條件 (SCOTT.CK_BONUS02_COMM)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-5:定義檢查約束(check)練習(xí):建立表author04,列sal的取值范圍為0-10000,表結(jié)構(gòu)如下:表名稱列名約束數(shù)據(jù)類型缺省值注釋Aut

17、hor04authornoPrimary keyNumber(3)anameNot nullVarchar2(10)salcheckNumber(7,2)00-10000deptnoNumber(2)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-6:定義復(fù)合約束基于多列定義符合約束。例:建立學(xué)生選課表,依據(jù)學(xué)生編號(xsbh)和課程編號(kcbh)建立主鍵。create table xsxk( xsbh number(10), kcbh number(6), kcmc varchar2(30), constraint pk_xsxk_xsb

18、h_kcbh primary key (xsbh,kcbh);2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-6:定義復(fù)合約束測試:SQL insert into xsxk (xsbh,kcbh,kcmc) values (1008203105,100000,Oracle數(shù)據(jù)庫原理與應(yīng)用); 1 row inserted SQL /insert into xsxk (xsbh,kcbh,kcmc) values (1008203105,100000,Oracle數(shù)據(jù)庫原理與應(yīng)用) ORA-00001: 違反唯一約束條件 (SCOTT.PK_X

19、SXK_XSBH_KCBH)2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)1:定義表的列約束任務(wù)1-6:定義復(fù)合約束練習(xí):客戶網(wǎng)上訂購商品,一張訂單必須包含訂單號、客戶編號和商品編號,對客戶編號和商品編號使用復(fù)合約束。2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-1:增加約束任務(wù)2-2:修改約束名任務(wù)2-3:刪除約束任務(wù)2-4:禁止約束任務(wù)2-5:激活約束2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-1:增加約束表emp01的結(jié)構(gòu):nametypenullab

20、ledefaultcommentsempnoNumber(4)Y雇員編號enameVarchar2(10)YjobVarchar2(15)YCLERKsalNumber(7,2)Y0.00commNumber(7,2)Y0.00deptnameVarchar2(14)Y2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-1:增加約束例1:增加非空約束,為emp01表的列empno增加非空約束。SQL alter table emp01 modify empno constraint nn_emp01_empno not null;例2:增加唯一約

21、束,為emp01表的列ename增加唯一約束。SQLalter table emp01 add constraint uk_emp01_ename unique(ename);例3:增加主鍵約束,為emp01表的列empno增加主鍵約束。SQLalter table emp01 add constraint pk_emp01_empno primary key(empno);2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-1:增加約束例4:增加外鍵約束,為emp01表添加列deptno,為列empno增加外鍵約束。alter table em

22、p01add ( deptno number(2), constraint fk_emp01_deptno foreign key(deptno) references dept(deptno);例5:增加檢查約束,為emp01表的列comm增加check約束,范圍0-3000。SQLalter table emp01 add constraint ck_emp01_comm check(comm between 0 and 3000);2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-1:增加約束練習(xí)1:在表dept01中對列deptno添加

23、主鍵約束,表結(jié)構(gòu)如下:表名稱列名約束數(shù)據(jù)類型缺省值注釋dept01deptnoPrimary keyNumber(2)dnameVarchar2(20)練習(xí)2:在表author中,增加一個列deptno與dept01的列deptno建立外鍵約束,表結(jié)構(gòu)如下:表名稱列名約束數(shù)據(jù)類型缺省值注釋AuthorauthornoPrimary keyNumber(3)anameuniqueVarchar2(10)salcheckNumber(6,2)02022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-1:增加約束練習(xí)3:對author表的authorno列建立主鍵約束。練習(xí)4:對author表的aname列建立唯一約束和非空約束。練習(xí)5:對author表的sal列建立檢查約束,檢查范圍0-8000。2022年3月1日星期二計算機(軟件)學(xué)院Oracle數(shù)據(jù)庫原理與應(yīng)用任務(wù)2:維護表的列約束任務(wù)2-2:修改約束名例:將emp01表的主

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論