创建一个插入内容的触发器

时间:2014-05-21 07:29:18

标签: mysql sql

在mysql中创建触发器我需要一些帮助: 我有一个名为“country”的列,另一个名为“tag”。

每当有人插入城市“洛杉矶”时,我希望我的触发器在“标签”栏中插入文本“来自加利福尼亚”。

编辑:

delimiter //
CREATE TRIGGER update_tag AFTER UPDATE ON users
    FOR EACH ROW
    BEGIN
        IF (city = 'Los Angeles') THEN 
            INSERT INTO users(tag) VALUES (California);
        END IF;
    END;//
delimiter ;

这似乎是在没有错误的情况下执行的,但是没有在" tag"中插入任何内容。柱, 任何想法为什么?

PS。我赞赏那些用" - "评价这篇文章的人。给我写一个PM并告诉我我做错了什么:)。谢谢。

1 个答案:

答案 0 :(得分:2)

您不能使用insert语句来更新当前正在处理的行。您应该使用SET NEW.cxy = ""语法。

我为你准备了a working sqlfiddle,希望能表明你想要实现的目标。

CREATE TABLE users (
  id int auto_increment PRIMARY KEY,
  `city` varchar(255),
  `tag` varchar(255)
  )//


CREATE TRIGGER update_tag BEFORE UPDATE ON users
    FOR EACH ROW
    BEGIN
        IF (NEW.city = 'Los Angeles') THEN 
            SET NEW.tag = "California";
        END IF;
    END//

INSERT INTO users VALUES (1, 'test', '')//
UPDATE users SET `city` = 'Los Angeles'//

请注意,这也是BEFORE UPDATE触发器,因此您的更改也会保存。

如果有人发出SELECT * FROM users,则会收到一行

1     Los Angeles    California

还有a page in the MySQL manual包含触发器示例。你应该仔细阅读。