原文:
關於資料的級聯刪除和更新
」在這裡我建立兩張表:「productcategory」,「product」.
有乙個需求是這樣的:在刪除某個productcategory 的時候,同時刪除該category的products.
這裡是建立兩張表的指令碼:
create
table [dbo].[productcategory](
[id] [uniqueidentifier] not
null,
[name] [varchar](50) null,
constraint [pk_productcategory] primary
keyclustered
( [id] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]
create
table [dbo].[product](
[id] [uniqueidentifier] not
null,
[categoryid] [uniqueidentifier] null,
[name] [varchar](50) null,
[price] [decimal](18, 0) not
null,
constraint [pk_product] primary
keyclustered
( [id] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]
建立後的表大致如下:
一些實驗資料:
insert into [test].[dbo].[productcategory] values('4b07a7d0-b56a-4de3-9f55-972ac6d60994','category1');
insert into [test].[dbo].[product] values(newid(),'4b07a7d0-b56a-4de3-9f55-972ac6d60994','product1','1');
insert into [test].[dbo].[product] values(newid(),'4b07a7d0-b56a-4de3-9f55-972ac6d60994','product2','2');
insert into [test].[dbo].[product] values(newid(),'4b07a7d0-b56a-4de3-9f55-972ac6d60994','product3','3');
insert into [test].[dbo].[product] values(newid(),'4b07a7d0-b56a-4de3-9f55-972ac6d60994','product4','4');
有很多種方法可以實現這個功能:
在模型層中處理:
public
class productcategoryrepository
}
這個比較簡單也很容易理解,但是它有個問題:如果是直接通過執行sql 來刪除category的。那麼這個約束就無法滿足了,或者是說你必須記得如果要刪除category的話,那麼就應該使用deletecategory方法。
於是第二種方法出現了:
通過觸發器來級聯刪除:
具體的觸發器**如下:
create
trigger [dbo].[deleterelatedproducts] on [dbo].[productcategory]
after
delete
asbegin
set nocount on;
delete
from [dbo].[product] where categoryid in
(select id from deleted
)end
這種方式比較簡單,而且語法也很明了:
具體資料可以參照:
還有一種方式可能並不是很多人知道:
外來鍵的級聯刪除和更新:
在sql server 中可以通過設定外來鍵的級聯刪除和更新來實現這個功能。
這裡是外來鍵的定義:來自
簡介外來鍵(foreign key)
如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的聯絡。以另乙個關係的外來鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。換而言之,如果關係模式r中的某屬性集不是r的主鍵,而是另乙個關係r1的主鍵則該屬性集是關係模式r的外來鍵,通常在資料庫設計中縮寫為fk。
外來鍵的作用
保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料。 使兩張表形成關聯,外來鍵只能引用外表中的列的值或使用空值
我們現在的要求是刪除productcategory的時候,同時刪除該productcategory下面的product。
所以應該在product 表中建立外來鍵約束,
看到刪除規則了嗎,指定為層疊的話,那麼當刪除productcategory的時候,就會刪除product了。
select * from productcategory;
select * from product;
delete
from productcategory;
select * from productcategory;
select * from product;
結果如下:
級聯刪除和更新
1.建立表時新增on delete cascade,on update cascade create table goods gid int primary key,gname varchar 10 gprice money insert into goods values 101,nokia 12...
Oracle系列 級聯刪除和級聯更新
必須宣告 此部落格 於oracle外來鍵級聯刪除和級聯更新 鑑於此前收藏的精彩部落格無料被刪除了,很是痛心,所以還是要複製一下 一 級聯刪除 oracle在外鍵的刪除上有no action 類似restrict cascade和set null三種行為。下面以學生 班級為例說明不同情況下的外來鍵刪除...
Oracle外來鍵級聯刪除和級聯更新
oracle在外鍵的刪除上有no action 類似restrict cascade和set null三種行為。下面以學生 班級為例說明不同情況下的外來鍵刪除,學生屬於班級,班級的主鍵是學生的外來鍵。班級表 crate table tb class id number not null,班級主鍵 n...