十年河東,十年河西,莫欺少年窮
本篇主旨是如何物理刪除有主外來鍵約束的記錄!那麼,我們從主外來鍵走起!
下面新建三張有主外來鍵約束的表,分別為:系/學院表,專業班表,學生表,如下:
create由上述sql指令碼,我們可以得到:學生表外來鍵於班級表、班級表外來鍵於系/學院表。也就是說:系和班級是1:n 的關係,同理班級和學生也是1:n 的關係。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('男'
),)
上述的主外來鍵很清晰!
下面我們新增記錄,如下:
由上圖,我們可以看出計算機系下,有計算機網路、電腦科學與技術兩個專業班。計算機網路、電腦科學與技術兩個班級均有兩個學生!
現在我們有如下需求:
刪除計算機系~
因為有外來鍵約束,所以當我們刪除時,會發現刪除失敗!
而這時我們要做的是:先刪除學生表、再刪除班級表、最後刪除系/學院表。
有了以上思路,我們就可以寫儲存過程了!
儲存過程如下:
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...