-3

表结构为:

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 ;

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '; 附近使用的正确语法。
ELSE
t_group=old.parent_group
t_group=old.PKey;
万一;' 在第 6 行
mysql> DELIMITER ;


你能告诉我我在这里缺少什么吗?

4

2 回答 2

2

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

您提供的链接有 4 年和 5 年之久!由于该SIGNAL语句自5.5.0 版(3 年前发布)起在 MySQL 中可用,因此使用这两个网页中描述的 hack 确实不是一个好主意。相反,请使用SIGNAL 语句

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

于 2012-11-20T17:23:05.903 回答
1

在您的 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;

我从来没有这样做过。这是一种丑陋的做法。但如果它有效,那又怎样。

于 2012-11-20T17:08:00.380 回答