SQL和 Oracle外鍵的相關(guān)約束中的級聯(lián)刪除 我們在相關(guān)的系統(tǒng)中如果你要刪除相關(guān)記錄 我們就要關(guān)聯(lián)一起刪除N多張表 同時它們之間還存在著相互約束的關(guān)系 所以考慮到在創(chuàng)建表時加上約束關(guān)系
創(chuàng)新互聯(lián)建站專業(yè)提供遂寧聯(lián)通機房服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買遂寧聯(lián)通機房服務(wù),并享受7*24小時金牌售后服務(wù)。
詳細(xì)內(nèi)容如下:
SQL的Oracle外鍵約束可以實現(xiàn)級聯(lián)刪除與級聯(lián)更新;Oracle 則只充許級聯(lián)刪除
SQL級聯(lián)刪除與級聯(lián)更新使用格式
CREATE TABLE A (ID INT PRIMARY KEY NAME VARCHAR( ))
CREATE TABLE A (ID INT REFERENCES A (ID)ON DELETE CASCADE ON UPDATE CASCADE AGE TINYINT)
Oracle 級聯(lián)刪除使用格式
CREATE TABLE A (ID INT PRIMAY KEY NAME VARCHAR ( ))
CREATE TABLE A (ID INT REFERENCES A (ID)ON DELETE CASCADE AGE NUMBER( ))
CREATE TABLE groups
(
id VARCHAR ( ) CONSTRAINT pk_groupid PRIMARY KEY
name VARCHAR ( )
description VARCHAR ( )
)
TABLESPACE userspace;
CREATE TABLE usringrp
(
group_id VARCHAR ( ) CONSTRAINT fk_uing_grpid
REFERENCES groups(id)
ON DELETE CASCADE
user_id VARCHAR ( )
)
TABLESPACE userspace;
PowerDesigner
參照完整性約束
限制(Restrict) 不允許進行修改或刪除操作 若修改或刪除主表的主鍵時 如果子表中存在子記錄 系統(tǒng)將產(chǎn)生一個錯誤提示 這是缺省的參照完整性設(shè)置
置空(Set Null) 如果Oracle外鍵列允許為空 若修改或刪除主表的主鍵時 把子表中參照的外鍵列設(shè)置為空值(NULL)
置為缺省(Set Default) 如果指定了缺省值 若修改或刪除主表的主鍵時 把子表中參照的Oracle外鍵設(shè)置為缺省值(Default)
級聯(lián)(Cascade) 把主表中主鍵修改為一個新的值時 相應(yīng)修改子表中Oracle外鍵的值 或者刪除主表中主鍵的記錄時 要相應(yīng)刪除子表中外鍵的記錄
lishixinzhi/Article/program/Oracle/201311/17613
失效:ALTER TABLE 表名 DISABLE CONSTRANT 約束名;
啟用:ALTER TABLE 表名 ENABLE CONSTRANT 約束;
先令約束失效,導(dǎo)數(shù),再啟用約束
添加約束語句格式:
alter table 表名 add constraint 主鍵約束名 primary key(主鍵列名表序列);
如:
alter table 修課表 add constraint pk_xh_kc primary key(學(xué)號,課程號);
刪除約束語句格式:
alter table 表名 drop CONSTRAINT 主鍵約束名;
如:
alter table 修課表 drop CONSTRAINT pk_xh_kc;
可用sql語句刪除外鍵約束,也可以用其他工具操作(如PL/SQL)。
一、語句刪除:
alter?table?表名?drop?constraint?外鍵名;
二、工具刪除:
1、登錄PL/SQL到指定數(shù)據(jù)庫。
2、左側(cè)找到Tables選項。
3、找到相應(yīng)的表,如emp,然后找到Foreign keys選項。
4、右鍵顯示出來的外鍵,點擊“刪掉”即可。
select 'alter table '||a.table_name||' drop constraint '||a.constraint_name||';'
from user_constraints A,USER_CONS_COLUMNS B where A.table_name='TT' AND A.TABLE_NAME=B.TABLE_NAME
生成的sql語句,把您要刪除的選出來,執(zhí)行一下就好了
約束用于限制加入表數(shù)據(jù)的類型,目的是保證數(shù)據(jù)的一致性和完整性
創(chuàng)建格式:在創(chuàng)建表時規(guī)定約束(在Create添加),也可以在創(chuàng)建之后添加(Alter table)。
約束類型:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、DEFAULT。
非空約束就是限制必須為某個列提供值,不允許有空值的存在。
空值(NULL)是不存在的值,它既不是數(shù)字0也不是空字符串,而是不存在未知的情況,即:該列的所有值不能為空,但可以為空字符或者0。
結(jié)果:通過desc查看會發(fā)現(xiàn)Nullable那一列的Y消失,表示此列不能為空。且在插入數(shù)值的時候此列必須添加數(shù)值,否則會報錯。
取消非空約束使用alter方法:alter table test1 modify Author null; 設(shè)置test1的Author可以
唯一性約束強調(diào)所在的列不允許有相同的值,但可以有多個Null。
其定義比主鍵約束弱,即他的列允許有空值(主鍵不允許有空值),唯一性約束的主要作用是保證在除主鍵外,其他列值得唯一性。
即:直接在列后面添加unique,
或在列后面添加 constraint 約束名 unique,
或在最后添加constraint 約束 unique(列名),
或者alter table 表名 add constraint 約束名 unique(列名);
建議使用的方法為alter和在最后添加最后添加constraint 約束 unique(列名)。
注:添加約束名的好處為:便于刪除操作,在刪除時需要通過約束名來完成操作。同時如果不添加約束名則系統(tǒng)會自動生成約束名,在表移動等操作時,約束名也會更改,會造成后期操作的麻煩。
取消唯一性約束:alter table test3 drop constraint QQ_UK2;
主鍵約束唯一地標(biāo)識了每一行記錄(非空+唯一),在一個表中,最多只能有一個主鍵約束,主鍵約束既可以由一個列組成,也可以由兩個或兩個以上列組成(這種稱聯(lián)合主鍵)。
具體的方法和添加唯一約束相同,建議使用的方法為alter和在最后添加最后添加constraint 約束 unique(列名)。
刪除主鍵:alter table 表名 drop constraint 約束名
外鍵約束主要是在B表中的某一列受到A表的制約,B的那一列的值只能是A內(nèi)的值,比如工資表的員工號必須受員工表的員工號限制一樣,工資表不能有不存在的員工號。
一般外鍵約束會使用兩個表進行關(guān)聯(lián),外鍵是指"當(dāng)前表"引用"另一個表"的某一列或某幾列。在另一個表中,被引用的列必須具有主鍵約束或者唯一性約束,不存在的數(shù)據(jù)不能出現(xiàn)在當(dāng)前表的對應(yīng)列中。一般情況下當(dāng)刪除被引用表中數(shù)據(jù)時,該數(shù)據(jù)也不能出現(xiàn)在外鍵列中,如果存在則刪除失敗。
刪除外鍵約束:alter table test5_1 drop constraint FK_test_5_1;
check約束是為了讓表中某字段值只能輸入固定的值。
check設(shè)置數(shù)值范圍:constraint check 表名 check (列名 between 小范圍 and 大范圍);
設(shè)置為大寫:constraint check 表名 check (列名 = upper(列名));
取消 alter table test6_2 drop constraint check_test_6_2;
默認(rèn)約束是設(shè)置列的默認(rèn)值,即當(dāng)插入一行時,若不給出該列的值,就用默認(rèn)值代替。
結(jié)果:在添加數(shù)據(jù)的時候,如果在設(shè)置有默認(rèn)值的列沒有添加數(shù)據(jù)則會把默認(rèn)值添加進去。
取消默認(rèn)約束 alter table test2 modify BOOKNAME default null;
注:
add用于修改字段類型和長度的(即修改字段的屬性)
modify修改表的數(shù)據(jù)結(jié)構(gòu)。
update是修改數(shù)據(jù)內(nèi)容的。
drop是刪除數(shù)據(jù)內(nèi)容。