溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

oracle中數(shù)據(jù)完整性的示例分析

發(fā)布時(shí)間:2021-11-11 10:24:56 來源:億速云 閱讀:236 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

小編給大家分享一下oracle中數(shù)據(jù)完整性的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

1.  數(shù)據(jù)的完整性簡介

    就是正確性、準(zhǔn)確性,包含三種:實(shí)體完整性、參照完整性、

用戶自定義完整性。Oracle中主要通過約束、觸發(fā)器、過程函數(shù)

實(shí)現(xiàn)的。 以下內(nèi)容講通過約束實(shí)現(xiàn)數(shù)據(jù)完整性。

舉例兩個(gè)表:

學(xué)生(學(xué)號(hào),姓名,系編號(hào))

系(系編號(hào),系名稱)

員工(編號(hào),姓名,出生日期,工作日期)

那么:

學(xué)號(hào)是主鍵列,其值不能錯(cuò)誤,如不能負(fù)值,這就是實(shí)體完整性;

系編號(hào)是外鍵,學(xué)生表的系編號(hào)參照系表,也就是說學(xué)生表的系編號(hào)的值必須在系表的系編號(hào)的值范圍內(nèi)【或者為空】,這就是參照完整性;

員工表的出生日期一定需要小宇工作日期,這就是用戶自定義完整性。

2.  維護(hù)數(shù)據(jù)的完整性,有not null、unique、check、primary key、foreign key五種。

    not null例如學(xué)生的姓名;unique例如學(xué)生的學(xué)號(hào);primary key主鍵、foreign key外鍵、check可以按照用戶要求,進(jìn)行自動(dòng)檢查。

    unique不可以重復(fù),但是可以為空。

    primary key不可以重復(fù),也不能為空。

    一個(gè)表只能一個(gè)primary key,卻可以多個(gè)unique。 

    not null只能在列內(nèi)定義,其他4種約束可以在列定義結(jié)束后,在表內(nèi)定義。

not null示例(這里的not null約束由系統(tǒng)自動(dòng)起名):

create table yg2(bh number(4) not null,xm varchar2(8));  

check示例:

create table yg3(bh number(4) not null  check (bh>0  and  bh<10000),   xm varchar2(8));

unique示例:

create table yg4(部門號(hào) number(4) not null, 部門內(nèi)號(hào)  number(4) ,   xm varchar2(8) , unique(部門號(hào),部門內(nèi)號(hào)) );

default的使用 

  create table gz_新員工  (bh number(4),xm varchar2(8),gz number(10) default 1000 ); //適用于沒有向列顯式的指定數(shù)值的情況。

primary key示例(此列不允許為空,而且ORACLE會(huì)自動(dòng)為主鍵列創(chuàng)建索引,這里的primary key約束由用戶顯式起名):

create table student(xh number(6)  constraint code_pk  primary key , xm varchar2(20));

foreign key示例(實(shí)現(xiàn)兩個(gè)表之間參照與被參照的關(guān)系,外鍵只能取主鍵已經(jīng)有的值,這里的foreign key由系統(tǒng)自動(dòng)起名):

create table address (xh number(8) ,zz varchar2(50) , foreign key(xh) references student(xh));

試驗(yàn)primary key和foreign key約束:

insert into student values(1,'張一');

insert into address values(1,'鄭州'); 

insert into address values(2,'鄭州'); 

(3)用戶的約束在user_constraints表、和user_cons_columns表中 

 select * from user_constraints;

實(shí)踐練習(xí)題目:

問題:

建立2個(gè)表,一個(gè)是StudentInformatino(學(xué)號(hào)sno,姓名

sname,年齡sage,性別smale,系編號(hào)

deptNo),一個(gè)是department(系編號(hào)deptno,

系名稱deptname)。

 要求:

    每個(gè)表有主鍵。

    StudentInformation表建立外鍵。

    學(xué)生的姓名不能為空。

    學(xué)生的年齡要在18到50之間。

    學(xué)生的性別必須是男女之一,默認(rèn)是男。

    StudentInformation表的deptno列,要參照department表的

deptno列。

3.2 給已有的表添加約束:

除了添加not null需要使用modify命令,其他都是類似alter table tablename  add  CONSTRAINTS的方式。

上面例子,允許stuInfo中的姓名可以為空:alter table stuinfo modify sname null;

允許stuInfo中的姓名不能重復(fù):alter table stuinfo  add constraints  sname_unique  unique(sname) ;

要求department的系名稱列的內(nèi)容,必須大于4個(gè)字符長度:alter table 

department add constraints  deptName_check  check(length(deptName)>4);

3.3 刪除約束:

alter table 表名 drop constraint 約束名;

alter table department drop constraint deptName_check;  -- 刪除剛才建立的department表上的deptName_check 約束

刪除主鍵語句:alter table 表名 drop primary key;

   如果出錯(cuò):ORA-02273: 此唯一/主鍵已被某些外鍵引用,可以:alter table department drop primary key cascade;

   如果刪除一個(gè)主鍵被引用的表,可以:drop table 表名 cascade constraints;

看完了這篇文章,相信你對(duì)“oracle中數(shù)據(jù)完整性的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI