用命令sql删除主题

时间:2014-02-05 05:29:48

标签: mysql

我有主题和命令表的数据库代码

我想要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)
);

感谢所有......

2 个答案:

答案 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中的相应行。

An SQLfiddle to test with

作为旁注,我个人非常谨慎地添加可能会意外改变数据的约束。如果您在多个步骤中设置了级联,则单个意外删除可能最终会删除引用行的批次