使用命令 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 删除主题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用FORFILES命令来删除SQL Server备份

删除表的记录的sql命令是啥?

使用 C# 命令从多个 SQL 表中删除

sql 命令使用简单记录

sql命令删除id用SQL语句批量删除指定ID

Sql命令删除从文本字段中获取的值[重复]