我正在创建两个表RegistrationHeader和RegistrationDetail。如何添加一个约束,当我删除RegistrationHeader表以自动删除RegistrationDetail表时。
create table RegistrationHeader(
RegistrationNo numeric
,BillingID varchar(30) not null
,RegistrationDate date not null
,PaymentType varchar check (PaymentType = 'CC' or PaymentType = 'PO' or PaymentType = 'Check') not null
,CCNumber numeric check(CCNumber >= 15 and CCNumber <=16)
,PONumber varchar(30)
,CheckNumber varchar(10)
,primary key(RegistrationNo)
,foreign key(BillingId) references Person(UserID)
,constraint CC_CCNumber_constr check(
(PaymentType = 'CC' and CCNumber is not null)
or
(PaymentType != 'CC' and CCNumber is null)
)
,constraint PO_PONumber_constr check(
(PaymentType = 'PO' and (PONumber is not null or PONumber != ''))
or
(PaymentType != 'PO' and PONumber is null)
)
,constraint CheckNumber_type_constr check(PaymentType != 'Check' and CheckNumber is null)
);
create table RegistrationDetail(
RegistrationNo numeric
,LineNumber numeric
,CourseID numeric(10) not null
,AttendeeID varchar(30) not null
primary key(RegistrationNo,LineNumber)
);
感谢您的帮助!
答案 0 :(得分:5)
你需要
1)在RegistrationHeader.RegistrationNo
和RegistrationDetail.RegistrationNo
2)将ON DELETE CASCADE
添加到RegistrationDetail外键定义
我没有对此进行测试,但我相信这应该是您在 SQL Server
中寻找的内容ALTER TABLE RegistrationDetail
ADD CONSTRAINT FK_RegistrationHeader_RegistrationDetail_Cascade
FOREIGN KEY (RegistrationNo) REFERENCES RegistrationDetail (RegistrationNo) ON DELETE CASCADE
答案 1 :(得分:1)
约束只影响数据库列,例如主键/外键或常规列,而不是整个表。您可以为外键添加OnDelete
或OnUpdate
约束,以删除/保持从一个表到其他表但不是整个表的引用。这就是将DML
(选择,更新,插入,删除)与DDL
混合(创建,删除)。尝试详细了解DML
和DDL
。
Here's 一篇关于那篇的好文章