亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Oracle PL/SQL語(yǔ)言初級(jí)教程之完整性約束

瀏覽:108日期:2023-11-20 19:56:55
完整性約束 完整性約束用于增強(qiáng)數(shù)據(jù)的完整性,Oracle提供了5種完整性約束:  Check  NOT NULL  Unique  Primary  Foreign key完整性約束是一種規(guī)則,不占用任何數(shù)據(jù)庫(kù)空間。完整性約束存在數(shù)據(jù)字典中,在執(zhí)行SQL或PL/SQL期間使用。用戶可以指明約束是啟用的還是禁用的,當(dāng)約束啟用時(shí),他增強(qiáng)了數(shù)據(jù)的完整性,否則,則反之,但約束始終存在于數(shù)據(jù)字典中。禁用約束,使用ALTER語(yǔ)句ALTER TABLE table_name DISABLE CONSTRAINT constraint_name; 或ALTER TABLE policies DISABLE CONSTRAINT chk_gender 假如要重新啟用約束:ALTER TABLE policies ENABLE CONSTRAINT chk_gender 刪除約束ALTER TABLE table_name DROP CONSTRAINT constraint_name 或ALTER TABLE policies DROP CONSTRAINT chk_gender; Check 約束在數(shù)據(jù)列上Check 約束需要 一個(gè)非凡的布爾條件或者將數(shù)據(jù)列設(shè)置成TRUE,至少一個(gè)數(shù)據(jù)列的值是NULL,Check約束用于增強(qiáng)表中數(shù)據(jù)內(nèi)容的簡(jiǎn)單的商業(yè)規(guī)則。用戶使用Check約束保證數(shù)據(jù)規(guī)則的一致性。Check約束可以涉及該行同屬Check約束的其他數(shù)據(jù)列但不能涉及其他行或其他表,或調(diào)用函數(shù)SYSDATE,UID,USER,USERENV。假如用戶的商業(yè)規(guī)則需要這類的數(shù)據(jù)檢查,那么可以使用觸發(fā)器。Check約束不保護(hù)LOB數(shù)據(jù)類型的數(shù)據(jù)列和對(duì)象、嵌套表、VARRY、ref等。單一數(shù)據(jù)列可以有多個(gè)Check約束保護(hù),一個(gè)Check約束可以保護(hù)多個(gè)數(shù)據(jù)列。創(chuàng)建表的Check約束使用CREATE TABLE語(yǔ)句,更改表的約束使用ALTER TABLE語(yǔ)句。語(yǔ)法:CONSTRAINT [constraint_name] CHECK (condition); Check約束可以被創(chuàng)建或增加為一個(gè)表約束,當(dāng)Check約束保護(hù)多個(gè)數(shù)據(jù)列時(shí),必須使用表約束語(yǔ)法。約束名是可選的并且假如這個(gè)名字不存在,那么oracle將產(chǎn)生一個(gè)以SYS_開始的唯一的名字。例:CREATE TABLE policies(policy_id NUMBER,holder_name VARCHAR2(40),gender VARCHAR2(1) constraint chk_gender CHECK (gender in ('M','F'),marital_status VARCHAR2(1),date_of_birth DATE,constraint chk_marital CHECK (marital_status in('S','M','D','W')));NOT NULL約束NOT NULL約束應(yīng)用在單一的數(shù)據(jù)列上,并且他保護(hù)的數(shù)據(jù)列必須要有數(shù)據(jù)值。缺省狀況下,ORACLE答應(yīng)任何列都可以有NULL值。某些商業(yè)規(guī)則要求某數(shù)據(jù)列必須要有值,NOT NULL約束將確保該列的所有數(shù)據(jù)行都有值。例:CREATE TABLE policies(policy_id NUMBER,holder_name VARCHAR2(40) NOT NULL,gender VARCHAR2(1),marital_status VARCHAR2(1),date_of_birth DATE NOT NULL); 對(duì)于NOT NULL的ALTER TABLE語(yǔ)句與其他約束稍微有點(diǎn)不同。ALTER TABLE policies MODIFY holder_name NOT NULL 唯一性約束(Unique constraint)唯一性約束可以保護(hù)表中多個(gè)數(shù)據(jù)列,保證在保護(hù)的數(shù)據(jù)列中任何兩行的數(shù)據(jù)都不相同。唯一性約束與表一起創(chuàng)建,在唯一性約束創(chuàng)建后,可以使用ALTER TABLE語(yǔ)句修改。語(yǔ)法:column_name data_type CONSTRAINT constraint_name UNIQUE 假如唯一性約束保護(hù)多個(gè)數(shù)據(jù)列,那么唯一性約束要作為表約束增加。語(yǔ)法如下:CONSTRAINT constraint_name (column) UNIQUE USING INDEX TABLESPACE (tablespace_name) STORAGE (stored clause)唯一性約束由一個(gè)B-tree索引增強(qiáng),所以可以在USING子串中為索引使用非凡特征,比如表空間或存儲(chǔ)參數(shù)。CREATE TABLE語(yǔ)句在創(chuàng)建唯一性約束的同時(shí)也給目標(biāo)數(shù)據(jù)列建立了一個(gè)唯一的索引。CREATE TABLE insured_autos(policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY,vin VARCHAR2(10),coverage_begin DATE,coverage_term NUMBER,CONSTRAIN unique_auto UNIQUE (policy_id,vin) USING INDEX TABLESPACE index STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0));用戶可以禁用未以性約束,但他仍然存在,禁用唯一性約束使用ALTER TABLE 語(yǔ)句ALTER TABLE insured_autos DISABLE CONSTRAIN unique_name;刪除唯一性約束,使用ALTER TABLE....DROP CONSTRAIN語(yǔ)句ALTER TABLE insured_autos DROP CONSTRAIN unique_name;注重用戶不能刪除在有外部鍵指向的表的唯一性約束。這種情況下用戶必須首先禁用或刪除外部鍵(foreign key)。刪除或禁用唯一性約束通常同時(shí)刪除相關(guān)聯(lián)的唯一索引,因而降低了數(shù)據(jù)庫(kù)性能。經(jīng)常刪除或禁用唯一性約束有可能導(dǎo)致丟失索引帶來(lái)的性能錯(cuò)誤。要避免這樣錯(cuò)誤,可以采取下面的步驟:1、在唯一性約束保護(hù)的數(shù)據(jù)列上創(chuàng)建非唯一性索引。2、添加唯一性約束主鍵(Primary Key)約束表有唯一的主鍵約束。表的主鍵可以保護(hù)一個(gè)或多個(gè)列,主鍵約束可與NOT NULL約束共同作用于每一數(shù)據(jù)列。NOT NULL約束和唯一性約束的組合將保證主鍵唯一地標(biāo)識(shí)每一行。像唯一性約束一樣,主鍵由B-tree索引增強(qiáng)。創(chuàng)建主鍵約束使用CREATE TABLE語(yǔ)句與表一起創(chuàng)建,假如表已經(jīng)創(chuàng)建了,可以使用ALTER TABLE語(yǔ)句。CREATE TABLE policies(policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY,holder_name VARCHAR2(40),gender VARCHAR2(1),marital_status VARCHAR2(1),date_of_birth DATE);與唯一性約束一樣,假如主鍵約束保護(hù)多個(gè)數(shù)據(jù)列,那么必須作為一個(gè)表約束創(chuàng)建。CREATE TABLE insured_autos(policy_id NUMBER,vin VARCHAR2(40),coverage_begin DATE,coverage_term NUMBER,CONSTRAINT pk_insured_autos PRIMARY KEY (policy_id,vin)USING INDEX TABLESPACE indexSTORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0));禁用或刪除主鍵必須與ALTER TABLE 語(yǔ)句一起使用ALTER TABLE policies DROP PRIMARY KEY;或ALTER TABLE policies DISABLE PRIMARY KEY;外部鍵約束(Foreign key constraint)外部鍵約束保護(hù)一個(gè)或多個(gè)數(shù)據(jù)列,保證每個(gè)數(shù)據(jù)行的數(shù)據(jù)包含一個(gè)或多個(gè)null值,或者在保護(hù)的數(shù)據(jù)列上同時(shí)擁有主鍵約束或唯一性約束。引用(主鍵或唯一性約束)約束可以保護(hù)同一個(gè)表,也可以保護(hù)不同的表。與主鍵和唯一性約束不同外部鍵不會(huì)隱式建立一個(gè)B-tree索引。在處理外部鍵時(shí),我們經(jīng)常使用術(shù)語(yǔ)父表(parent table)和子表(child table),父表表示被引用主鍵或唯一性約束的表,子表表示引用主鍵和唯一性約束的表。創(chuàng)建外部鍵使用CREATE TABLE語(yǔ)句,假如表已經(jīng)建立了,那么使用ALTER TABLE語(yǔ)句。CREATE TABLE insured_autos (policy_id NUMBER CONSTRAINT policy_fkREFERENCE policies(policy_idON DELETE CASCADE,vin VARCHAR2(40),coverage_begin DATE,coverage_term NUMBER,make VARCHAR2(30),model VARCHAR(30),year NUMBER,CONSTRAIN auto_fk FROEIGN KEY (make,model,year)REFERENCES automobiles (make,model,year)ON DELETE SET NULL);ON DELETE子串告訴ORACLE假如父紀(jì)錄(parent record)被刪除后,子記錄做什么。缺省情況下禁止在子記錄還存在的情況下刪除父紀(jì)錄。外部鍵和NULL值在外部鍵約束保護(hù)的數(shù)據(jù)列中NULL值的處理可能產(chǎn)生不可預(yù)料的結(jié)果。ORACLE 使用ISO standar Match None規(guī)則增強(qiáng)外部鍵約束。這個(gè)規(guī)則規(guī)定假如任何外部鍵作用的數(shù)據(jù)列包含有一個(gè)NULL值,那么任何保留該鍵的數(shù)據(jù)列在父表中沒(méi)有匹配值。比如,在父表AUTOMOBILES中,主鍵作用于數(shù)據(jù)列MAKE,MODEL,YEAR上,用戶使用的表INSURED_AUTOS有一個(gè)外部約束指向AOTOMOBILES,注重在INSURES_AUTOS中有一數(shù)據(jù)行的MODEL列為NULL值,這一行數(shù)據(jù)已經(jīng)通過(guò)約束檢查,即使MAKE列也沒(méi)有顯示在父表AUTOMOBILES中,如下表:表1 AUTOMOBILESMAKE MODEL YEARFord Taurus2000ToyotaCamry 1999表2 INSURED_AUTOSPOLICY_IDMAKE MODEL YEAR576 Ford Taurus 2000577 ToyotaCamry 1999 578 TUCker NULL 1949延遲約束檢驗(yàn)(Deferred Constraint Checking)約束檢驗(yàn)分兩種情況,一種是在每一條語(yǔ)句結(jié)束后檢驗(yàn)數(shù)據(jù)是否滿足約束條件,這種檢驗(yàn)稱為立即約束檢驗(yàn)(immediately checking),另一種是在事務(wù)處理完成之后對(duì)數(shù)據(jù)進(jìn)行檢驗(yàn)稱之為延遲約束檢驗(yàn)。在缺省情況下Oracle約束檢驗(yàn)是立即檢驗(yàn)(immediately checking),假如不滿足約束將先是一條錯(cuò)誤信息,但用戶可以通過(guò)SET CONSTRAINT語(yǔ)句選擇延遲約束檢驗(yàn)。語(yǔ)法如下:SET CONSTRAINT constraint_nameALL DEFEERREDIMMEDIATE --;
主站蜘蛛池模板: 成人性爱视频在线观看 | 亚洲欧美日韩国产综合 | 欧美成人丝袜一区二区 | 久久99精品久久久久久首页 | 国产色a| 青青草综合视频 | 久久午夜羞羞影院免费观看 | 最新中文字幕电影在线观看 | 亚洲欧美另类在线视频 | 男女午夜特黄毛片免费 | 久久精品亚洲一区二区 | 狠狠色丁香九九婷婷综合五月 | 亚洲第一页视频 | 国产精品日日做人人爱 | 国产日比| 欧美国产亚洲精品a第一页 欧美国产亚洲一区 | 一区二区三区国产 | 广东毛片 | 欧美区一区二区三 | 国产麻豆一级在线观看 | 黄色免费观看视频 | 国精品产 | 国产成人精品免费视频大全办公室 | 极品国模私拍福利在线观看 | 国产日韩线路一线路二 | 国产一区二区免费播放 | 久久青草免费97线频观 | 青青伊人影院 | 国产精品久久久久毛片 | 国产免费又色又爽又黄的网站 | 99久久99这里只有免费的精品 | 亚洲一级毛片在线观 | 三级a黄 | 日韩一区二区三区在线视频 | 国产黑丝在线播放 | 高清中文字幕 | 久久精品视频亚洲 | 亚洲欧洲在线视频 | 日本二级黄色片 | 亚洲精品一区二区三区婷婷月 | 免费一级欧美在线观看视频片 |