關於級聯刪除個人總結

2021-08-29 08:45:31 字數 1820 閱讀 9362

級聯刪除在系統開發中是很常見的處理方法,應用系統中很多以業務邏輯建立起來的實體集合形成乙個整體,但是他們分布在不同的表中,乙個實體消失了(或這是被軟刪除了),那麼跟他對應的(或者隸屬於它)一切其他屬性都應蓋被刪除(正常情況下 :( )。

這裡姑且舉乙個例子:

[b]刪除酒店。[/b]

酒店擁有:酒店法人(user),酒店房間(room),該酒店的房間型別(rtypes),

酒店房間的**(rphtoto),酒店**(hphoto),床位(beds)。

他們的結構是;

1,酒店法人。

:?:

2,酒店本體。

:?: :?:

3,酒店房間 , 酒店**。

:?: :?: :?:

4,房間型別 , 房間** , 床位。

因此,刪除酒店應該,自底向上的刪除,這樣才能將酒店一切資訊刪除乾淨,不會出現斷層而遺留報廢資料。

[code]

procedure deletehotel(p_userid number,

p_result out number)as

begin

p_result:=-1;

---刪除**

update photoes p

set p.valid=1

where exists(

select /*+rule*/ 1

from hotel h

where h.hotelid=p.hotelid

and h.valid=0

and h.userid=p_userid

)and p.valid=0;

---刪除房間型別

update roomtype rt

set rt.valid=1

where exists(

select /*+rule*/ 1

from hotel h

where h.hotelid=rt.hotelid

and h.valid=0

and h.userid=p_userid

)and rt.valid=0;

----刪除床位

delete from beds b

where exists(

select 1

from hotel h,rooms r

where r.hotelid=h.hotelid

and h.valid=0

and r.valid=0

and b.roomid=r.roomid

and h.userid=p_userid

);----刪除房間

update rooms t

set t.valid=1

where t.valid=0

and exists(select /*+rule*/1

from hotel h

where h.hotelid=t.hotelid

and h.valid=0

and h.userid=p_userid

);---刪除飯店

update hotel h

set h.valid=1

where h.valid=0

and h.userid=p_userid;

---刪除使用者

update emsuser u

set u.valid=1

where (u.valid=0 or u.valid=2)

and u.userid=p_userid;

p_result:=0;

end deletehotel;

[/code]

關於資料的級聯刪除和更新

原文 關於資料的級聯刪除和更新 在這裡我建立兩張表 productcategory product 有乙個需求是這樣的 在刪除某個productcategory 的時候,同時刪除該category的products.這裡是建立兩張表的指令碼 create table dbo productcateg...

oracle 級聯刪除

1 查詢外來鍵及父表 select a.constraint name 外鍵名,a.table name 子表,b.table name 父表 from user constraints a,user constraints b where a.constraint type r and b.con...

EFCodeFirst級聯刪除

預設情況下codefirst會在外鍵約束中設定 刪除規則 為級聯 不會預設設定 更新規則 為級聯 當僅定義了導航屬性如 public virtual manager manager 而沒有顯示定義外來鍵如 public int managerid codefirst不會設定 刪除規則 為級聯 在顯示...