当其他表上没有更多行时,SQL 删除行

Posted

技术标签:

【中文标题】当其他表上没有更多行时,SQL 删除行【英文标题】:SQL delete rows when no more row on other table 【发布时间】:2019-08-10 04:34:39 【问题描述】:

我正在尝试在 phpmyadmin 上创建触发器。 一旦WAITING_ROOM 中没有更多行,我想从表NEXT_GAME 中删除所有行。

我尝试了以下解决方案:

CREATE TRIGGER delete_begin_date AFTER DELETE
ON NEXT_GAME FOR EACH ROW
BEGIN
    IF NOT EXISTS (SELECT * FROM WAITING_ROOM) THEN
        DELETE FROM NEXT_GAME;
    END IF;
END

我收到以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 5

我做错了什么?

【问题讨论】:

【参考方案1】:

您需要一个特定的分隔符来告诉 mysql 下一个 ; 不会结束 CREATE TRIGGER 语句。

DELIMITER $$
CREATE TRIGGER delete_begin_date AFTER DELETE
ON NEXT_GAME FOR EACH ROW
BEGIN
    IF NOT EXISTS (SELECT * FROM WAITING_ROOM) THEN
        DELETE FROM NEXT_GAME;
    END IF;
-- vv----------------------- Notice this
END$$
DELIMITER ; -- switch back to the regular ;

【讨论】:

请注意,CREATE PROCEDURECREATE FUNCTION 也这样做了

以上是关于当其他表上没有更多行时,SQL 删除行的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法查看从 Oracle DB 中删除行时将执行哪些步骤?

删除行后更新 indexPath 值

重新插入以前删除的行时 SQL SERVER 2017 主键冲突

SQL问题,请教高手

从服务器删除行时遇到问题

在 Excel 中删除之前删除的行之间的行