在PHPMyAdmin中设置触发器

时间:2013-05-21 16:35:47

标签: mysql sql triggers phpmyadmin

我正在尝试理解触发器,我认为我完全理解它们,但我无法实现它们中的任何一个。我希望此代码删除名为“test”的用户。因此,如果有人更新其名称以“测试”,则应删除该用户。

我的示例代码:

CREATE TRIGGER `my_trigger`
BEFORE UPDATE ON `my_db` FOR EACH ROW
BEGIN
DELETE FROM my_table WHERE `username` = 'test';
END

我的错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 

我无法弄清楚删除语句为什么会给我一个错误。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是语法正确的SQL:

DELIMITER ;
DROP TRIGGER IF EXISTS `my_trigger`;
DELIMITER $$
CREATE TRIGGER `my_trigger`
BEFORE UPDATE ON `my_table` FOR EACH ROW
BEGIN
    DELETE FROM my_table WHERE `username` = 'test';
END$$
DELIMITER;

但是它不起作用,因为你无法从表中删除,你正在更新:

  

触发器可以访问自己的表中的旧数据和新数据。一个触发器   也可以影响其他表,但不允许修改   已经被使用(用于读或写)的表   调用函数或触发器的语句。

http://dev.mysql.com/doc/refman/5.5/en/faqs-triggers.html#qandaitem-B-5-1-9

如果你想要一个简单的例子,试试这个:

DELIMITER ;
DROP TRIGGER IF EXISTS `my_trigger`;
DELIMITER $$
CREATE TRIGGER `my_trigger`
BEFORE UPDATE ON `my_table` FOR EACH ROW
BEGIN
    SET NEW.`username` = 'aaa';
END$$
DELIMITER;

这将始终在更新时将'aaa'设置为用户名。

答案 1 :(得分:0)

可以仅将触发器与表关联起来。

同样在存储的函数或触发器中,不允许通过调用函数或触发器的语句修改已经使用(用于读取或写入)的表。

Restrictions on Stored Programs