我正在尝试理解触发器,我认为我完全理解它们,但我无法实现它们中的任何一个。我希望此代码删除名为“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
我无法弄清楚删除语句为什么会给我一个错误。有什么想法吗?
答案 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)