我有主题和命令表的数据库代码
我想要sql语句如果我想删除主题直接删除该主题的所有命令。 我的数据库是
create table if not exists subject(
S_Id INT(100) not null AUTO_INCREMENT,
FirstName varchar(255) not null,
title text not null,
PRIMARY KEY (S_Id)
);
create table if not exists comm(
C_Id int not null AUTO_INCREMENT,
message text not null,
S_Id int not null,
PRIMARY KEY (C_Id),
FOREIGN KEY (S_Id) REFERENCES Persons(S_Id)
);
感谢所有......
答案 0 :(得分:0)
@Satish Sharma就在这里是触发器SQL Server ON DELETE Trigger的链接 为你的例子
CREATE TRIGGER sampleTrigger
ON subject
FOR DELETE
AS
DELETE FROM comm
WHERE S_Id IN(SELECT deleted.S_Id FROM deleted)
GO
答案 1 :(得分:0)
如果您正在使用InnoDB,则可以在ON DELETE CASCADE
中使用引用外键上的foreign key contraint comm
。 (我在此假设S_Id
中的comm
外键应该引用subject
,而不是Persons
);
create table if not exists comm(
C_Id int not null AUTO_INCREMENT,
message text not null,
S_Id int not null,
PRIMARY KEY (C_Id),
FOREIGN KEY (S_Id) REFERENCES subject(S_Id) ON DELETE CASCADE
);
添加此约束后,Subject
的任何删除都会自动删除comm
中的相应行。
作为旁注,我个人非常谨慎地添加可能会意外改变数据的约束。如果您在多个步骤中设置了级联,则单个意外删除可能最终会删除引用行的批次。