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

2021-09-07 19:37:06 字數 3555 閱讀 9141

原文:

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

」在這裡我建立兩張表:「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...