表结构为:
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;
我从来没有这样做过事。 这是一种有点丑陋的方式。 但如果它有效,到底是什么。