使用命令 sql 删除主题
Posted
技术标签:
【中文标题】使用命令 sql 删除主题【英文标题】:delete subject with commands sql 【发布时间】:2014-02-05 05:29:48 【问题描述】:我有主题和命令表的数据库代码
如果我想删除主题,我想要 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)
);
谢谢大家...
【问题讨论】:
您必须阅读有关触发器的信息。见dev.mysql.com/doc/refman/5.0/en/triggers.html comm 中的外键是否应该引用主题表中的 s_id,还是我缺少表之间的链接? 【参考方案1】:如果您使用 InnoDB,您可以在 comm
中的引用外键上使用 foreign key contraint ON DELETE CASCADE
。 (我在这里假设comm
中的S_Id
外键应该引用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.
作为旁注,我个人非常小心添加这样的约束可能会意外改变数据。如果您在多个步骤中设置了级联,则一次意外删除可能最终会删除 很多 个引用行。
【讨论】:
【参考方案2】:@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
【讨论】:
我将您的评论粘贴到 mysql 我收到错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法以上是关于使用命令 sql 删除主题的主要内容,如果未能解决你的问题,请参考以下文章