系統(tǒng)中要刪除一條記錄,就要關(guān)聯(lián)到同時刪除好多張表,它們之間還存在著約束關(guān)系.所以考慮到在創(chuàng)建表時加上約束關(guān)系,詳細(xì)內(nèi)容如下:
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),河源企業(yè)網(wǎng)站建設(shè),河源品牌網(wǎng)站建設(shè),網(wǎng)站定制,河源網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,河源網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
SQL的外鍵約束可以實現(xiàn)級聯(lián)刪除與級聯(lián)更新;
ORACLE則只充許級聯(lián)刪除。
SQL級聯(lián)刪除與級聯(lián)更新使用格式:
CREATE TABLE A001(ID INT PRIMARY KEY,NAME VARCHAR(20))
CREATE TABLE A002(ID INT REFERENCES A001(ID)ON DELETE CASCADE ON UPDATE CASCADE,AGE TINYINT)
ORACLE級聯(lián)刪除使用格式:
CREATE TABLE A001(ID INT PRIMAY KEY,NAME VARCHAR2(20))
CREATE TABLE A002(ID INT REFERENCES A001(ID)ON DELETE CASCADE,AGE NUMBER(2,0))
--------------
CREATE TABLE groups
(
id VARCHAR2(16) CONSTRAINT pk_groupid PRIMARY KEY,
name VARCHAR2(32),
description VARCHAR2(50)
)
TABLESPACE userspace;
CREATE TABLE usringrp
(
group_id VARCHAR2(16) CONSTRAINT fk_uing_grpid
REFERENCES groups(id)
ON DELETE CASCADE,
user_id VARCHAR2(16)
)
TABLESPACE userspace;
---------------
PowerDesigner
參照完整性約束
來源:() - SQL與Oracle外鍵約束中的級聯(lián)刪除_點點_新浪博客
限制(Restrict)。不允許進(jìn)行修改或刪除操作。若修改或刪除主表的主鍵時,如果子表中存在子記錄,系統(tǒng)將產(chǎn)生一個錯誤提示。這是缺省的參照完整性設(shè)置。
置空(Set Null)。如果外鍵列允許為空,若修改或刪除主表的主鍵時,把子表中參照的外鍵列設(shè)置為空值(NULL)。
置為缺省(Set Default)。如果指定了缺省值,若修改或刪除主表的主鍵時,把子表中參照的外鍵設(shè)置為缺省值(Default)。
級聯(lián)(Cascade)。把主表中主鍵修改為一個新的值時,相應(yīng)修改子表中外鍵的值;或者刪除主表中主鍵的記錄時,要相應(yīng)刪除子表中外鍵的記錄。
注意:在oracle中建立好的constraint (包括primay key,foreign key) 如果要修改,必須先alter table drop contraint con_name;然后再重新add constraint
delete from emp where dno = dept表中你要刪除的dept的dno
可以把這個語句加到dept表的 觸發(fā)器中。也可以加在刪除dept語句的前面或后面的。
使用級聯(lián)刪除+觸發(fā)器可以搞定你的需求。\r\n父表A 子表B 備份表C\r\n命令如下:\r\ncreate table A \r\n(\r\n dept_ID number primary key,\r\n dept_name varchar2(10)\r\n);\r\n\r\ncreate table B\r\n(\r\n no number primary key,\r\n name varchar2(10),\r\n dept_id number\r\n);\r\n\r\nALTER TABLE WWJ.B ADD CONSTRAINT FK_B FOREIGN KEY (DEPT_ID) REFERENCES WWJ.A (DEPT_ID) ON DELETE CASCADE ENABLE VALIDATE;\r\n\r\nCREATE OR REPLACE TRIGGER WWJ.TR_B_01\r\nBEFORE DELETE\r\nON WWJ.B \r\nREFERENCING NEW AS New OLD AS Old\r\nFOR EACH ROW\r\nBEGIN\r\n INSERT INTO C VALUES(:old.no,:old.name,:old.dept_id);\r\nEND;
刪除dept表中的數(shù)據(jù):
delete
from
dept
t
where
t.city
=
'shanghai'
刪除與之關(guān)聯(lián)的emp表中的數(shù)據(jù):
delete
from
emp
e
where
e.deptno
in
(
select
t.deptno
from
dept
t
where
t.city
=
'shanghai'
)
刪主鍵值之前,必須先刪掉它的外鍵,這兩條SQL的執(zhí)行順序樓主自己調(diào)一下。
drop table talbe_name cascade;級聯(lián)刪除表
drop user user_name; 級聯(lián)刪除用戶
級聯(lián)刪除的前提是子表建了連接父表的外鍵,且外鍵是級聯(lián)刪除類型
這樣,在刪除父表的時候,會自動把子表相關(guān)數(shù)據(jù)刪除