MYSQL 触发器中的编译错误



表结构为:

mysql> DESC groups;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| PKey         | varchar(64)  | NO   | PRI | NULL    |       |
| group_name   | varchar(64)  | YES  |     | NULL    |       |
| Region       | varchar(128) | NO   |     | NULL    |       |
| Role         | varchar(128) | NO   |     | NULL    |       |
| parent_group | varchar(64)  | NO   | MUL | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

当我执行此触发器时,我遇到编译错误

DELIMITER $$
CREATE
    TRIGGER `group_before_delete` BEFORE DELETE
    ON `groups`
    FOR EACH ROW BEGIN
    IF old.parent_group=old.PKey THEN
        UPDATE `Error: deletion RootGroup is prohibited!`;
    ELSE              
        UPDATE groups
        SET parent_group=old.parent_group
        WHERE parent_group=old.Pkey; 
    END IF;
    END$$
DELIMITER ;

错误 1064 (42000): SQL 语法中有错误;检查与您的 MySQL 服务器版本对应的手册以了解在 ';

t_group=old.parent_group
t_group=旧。PKey;
结束 IF;"在第 6
行 mysql> 分隔符 ;


你能告诉我我在这里错过了什么吗?

代码中出现错误,因为 UPDATE 语句的语法无效。

您提供的链接是 4 年和 5 年!由于 SIGNAL 语句从 5.5.0 版本(3 年前发布)开始在 MySQL 中可用,因此使用这两个网页中描述的黑客确实不是一个好主意。请改用 SIGNAL 语句。

注意:从评论中我们了解到OP没有使用MySQL 5.5,因此SIGNAL不可用。

在 IF 语句中,以下内容不是有效的 SQL 语句:

UPDATE `Error: deletion RootGroup is prohibited!`;

这应该是这样的:

IF old.parent_group=old.PKey THEN
    UPDATE `Error: deletion RootGroup is prohibited!` set x=1;
ELSE              
    UPDATE groups
    SET parent_group=old.parent_group
    WHERE parent_group=old.PKey; 
END IF;

我从来没有这样做过事。 这是一种有点丑陋的方式。 但如果它有效,到底是什么。

相关内容

  • 没有找到相关文章

最新更新