C 如何物理刪除有主外來鍵約束的記錄 儲存過程實現

2021-09-07 13:25:18 字數 2364 閱讀 7928

十年河東,十年河西,莫欺少年窮

本篇主旨是如何物理刪除有主外來鍵約束的記錄!那麼,我們從主外來鍵走起!

下面新建三張有主外來鍵約束的表,分別為:系/學院表,專業班表,學生表,如下:

create

table dept--

系/學院表

(deptid

intidentity(1,1) primary

key,

deptname

nvarchar(50),--

系名稱

addtime datetime

default(getdate

()))

create

table grade--

班級表(

gradeid

intidentity(1,1) primary

key,

deptid

intforeign

keyreferences

dept(deptid),

gradenum

varchar(50) unique,--

專業班編號

gradename nvarchar(50),--

專業名稱

addtime datetime

default(getdate

()))

create

table

student

(studentid

intidentity(1,1) primary

key,

gradeid

intforeign

keyreferences

grade(gradeid),

studentname

nvarchar(50),--

學生姓名

sudent*** nvarchar(1) default('男'

),)

由上述sql指令碼,我們可以得到:學生表外來鍵於班級表、班級表外來鍵於系/學院表。也就是說:系和班級是1:n 的關係,同理班級和學生也是1:n 的關係。

上述的主外來鍵很清晰!

下面我們新增記錄,如下:

由上圖,我們可以看出計算機系下,有計算機網路、電腦科學與技術兩個專業班。計算機網路、電腦科學與技術兩個班級均有兩個學生!

現在我們有如下需求:

刪除計算機系~

因為有外來鍵約束,所以當我們刪除時,會發現刪除失敗!

而這時我們要做的是:先刪除學生表、再刪除班級表、最後刪除系/學院表。

有了以上思路,我們就可以寫儲存過程了!

儲存過程如下:

create

proc

deletedeptproc

(@deptid

int,

@issuccess

bit=

0output)as

begin

delete

from

[dbo

].[student

]where gradeid in (select gradeid from

[dbo

].[grade

]where deptid=

@deptid

)delete

from

[dbo

].[grade

]where deptid=

@deptid

delete

from

[dbo

].[dept

]where deptid=

@deptid

set@issuccess=1

end--

執行上述儲存過程

declare

@deptid

int,

@issuccess

bitset

@deptid=1

;exec deletedeptproc @deptid,@issuccess

執行結果如下(輸出引數可以在程式中判斷執行是否成功~嘻嘻~):

從上圖看出,可以一次性刪除完成!

之所以採用儲存過程是因為儲存過程的特性:要麼做,要麼不做!這樣就保證了資料的完整性!

當然,本節使用儲存過程實現的,大家也可以採用sql的觸發器實現,使用觸發器實現是基於級聯刪除!這個大家自行查詢資料!

@陳臥龍的部落格

MySQL如何刪除有外來鍵約束的資料

在資料庫中檢視外來鍵是否有效,值為1表示外來鍵有效 mysql select foreign key checks foreign key checks 1 1row inset 0.00 sec 將外來鍵的值設定為0,此時就是失效狀態,命令 set foreign key checks 0,這時就...

MySQL 如何刪除有外來鍵約束的表資料

在mysql中刪除一張表或一條資料的時候,出現 1 err 1451 cannot delete orupdate a parent row aforeign key constraint fails 這是因為mysql中設定了foreign key關聯,造成無法更新或刪除資料。可以通過設定fore...

MySQL 如何刪除有外來鍵約束的表資料

在mysql中刪除一張表或一條資料的時候,出現 err 1451 cannot deleteorupdatea parent row aforeignkeyconstraintfails 這是因為mysql中設定了foreign key關聯,造成無法更新或刪除資料。可以通過設定foreign key...