【问题标题】:Trigger ON DELETE using MariaDB使用 MariaDB 触发 ON DELETE
【发布时间】:2014-01-21 18:26:11
【问题描述】:

我有两个表'topic'和'answer':

表 1-> 主题

+-----+------------+
+  id +   name     +
+=====+============+
+  17 +  question1 +
+-----+------------+
+  18 +  question2 +
+-----+------------+

表 2 -> 答案

+----+---------+----------+
+ id + idtopic +   val    +
+----+---------+----------+
+  1 +  17     +  anwer1  +
+----+---------+----------+
+  2 +  18     +  answer2 +
+----+---------+----------+

在从表“主题”中删除项目时,我只是想创建一个触发器以从表“答案”中删除项目。 如果尝试了这段代码,但我认为 MariaDB 语法有问题:

CREATE TRIGGER delete_answer AFTER DELETE on topic
FOR EACH ROW
BEGIN
DELETE FROM answer
    WHERE answer.idtopic = topic.id;
END

【问题讨论】:

    标签: sql database triggers mariadb


    【解决方案1】:

    这是可以使用的版本。

    DELIMITER //
    CREATE TRIGGER delete_answer AFTER DELETE on topic
    FOR EACH ROW
    BEGIN
    DELETE FROM answer
        WHERE answer.idtopic = OLD.id;
    END
    //
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:

      使用OLD 关键字来引用主题中被删除的当前行。

      CREATE TRIGGER delete_answer AFTER DELETE on topic
      FOR EACH ROW
      BEGIN
      DELETE FROM answer
          WHERE answer.idtopic = OLD.id;
      END
      

      但是,我想知道您为什么要编写触发器而不是使用具有级联删除的外键。你没有为这个表使用 InnoDB 吗?

      【讨论】:

      • 这是我使用上述解决方案得到的结果:#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在第 5 行的 '' 附近使用
      • 您是否设置了DELIMITER?见mariadb.com/kb/en/delimiters-in-the-mysql-client
      猜你喜欢
      • 1970-01-01
      • 2012-04-17
      • 2014-09-26
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多