如何禁止这样的删除(高分求解)
表A结构:
规格书ID(主键)
规格书名称
表B结构:
版本ID(主键)
版本名称
规格书ID
表A和表B没有建立外键关系,但实际上表B的规格书ID来自表A规格书ID,
表B中规格书ID可重复
现在的问题是:当用户删除表A中的一条记录时,如果表B中已经存在表A中该规格书ID的一条或多条记录,应该提示用户不能删除已经相应版本记录的规格书
请问各位如何实现
问题点数:100、回复次数:6Top
1 楼631799(杭州工人)回复于 2004-12-03 22:46:47 得分 20
用主键,和外键完成最好.Top
2 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:53:11 得分 10
在A建删除触发器,进行判断,B如果有 rollback tranTop
3 楼kingfung(军哥)回复于 2004-12-03 23:00:04 得分 10
其实你在代码里限制不更好吗?Top
4 楼hdhai9451(☆新人类☆)回复于 2004-12-03 23:32:05 得分 10
//当用户删除表A中的一条记录时,如果表B中已经存在表A中该规格书ID的一条或多条记录,应该提示用户不能删除已经相应版本记录的规格书
應該是刪除不了的,因為它受到外鍵約束,刪除時它會提示錯誤Top
5 楼hdhai9451(☆新人类☆)回复于 2004-12-03 23:40:15 得分 50
create table ta(規格書ID varchar(10),規格書名稱 varchar(50),primary key(規格書ID))
insert into ta
select 'A1','MFC/VC'
union all select 'A2','sql server2000'
union all select 'A3','windows 2000'
create table tb(版本ID varchar(30),版本名稱 varchar(50),規格書ID varchar(10),
constraint FK_ta_規格書ID foreign key(規格書ID) references ta(規格書ID),
primary key (版本ID))
insert into tb select 'B1','windows xp','A1' ----->這條記錄插入成功
insert into tb select 'B1','windows xp','A5' ---->這條記錄插入失敗,因為"規格書ID"已經受到約束
受到約束,插入不成功
--測試刪除
delete from ta where 規格書ID='A1' ----->這句話也操作失敗,也是因為受到約束,tb中存在'A1'
受到約束,結果刪除不成功
--刪除表
drop table ta
drop table tb
從上面可以看出,你刪除A表中的"規格書ID"在B表中已經存在的內容
Top
6 楼hdhai9451(☆新人类☆)回复于 2004-12-03 23:41:00 得分 0
用這麼多數據測試,不知道樓主清楚了沒有?Top




