带触发器的mysql奇怪行为

时间:2014-05-20 08:01:42

标签: php mysql sql triggers

我有一张表discussions,用于存储我网站上的帖子数据。

现在我有2个触发器,其中一个在添加新行时插入path列,另一个在更新行时更新path,如下所示:

CREATE TRIGGER discussions_trigger BEFORE INSERT ON discussions FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='discussions');
IF(NEW.visibility<1)
THEN
SET NEW.path = CONCAT('discussions.php?id=',next_id);
ELSEIF(NEW.visibility>=1)
THEN
SET NEW.path = CONCAT('private.php?id=',next_id);
END IF;

CREATE TRIGGER discussions_update_trigger BEFORE UPDATE ON discussions FOR EACH ROW
BEGIN
DECLARE next_id INT;
SET next_id = OLD.id;
IF(NEW.visibility<1)
THEN
SET NEW.path = CONCAT('discussions.php?id=',next_id);
ELSEIF(NEW.visibility>=1)
THEN
SET NEW.path = CONCAT('private.php?id=',next_id);
END IF;

虽然这样做会有所作为,但每当我尝试插入或更新表discussions时,我会收到以下错误:

用户'abhishek'@'An unknown IP'未定义。

但是,仅abhishek

允许用户localhost

在尝试了所有内容后,我发现删除触发器,然后重新创建它们可以解决问题。当我再次收到错误时,我重新创建了触发器并且它有效。这有什么问题?

1 个答案:

答案 0 :(得分:1)

运行show triggers\G并检查DEFINER是否设置为user@localhost

如果没有,请将DEFINER的{​​{1}}修改为TRIGGER。语法如下:

user@localhost

有关详细讨论,请参阅问题的评论。