【问题标题】:Creating a trigger that insert something if创建一个插入一些东西的触发器,如果
【发布时间】:2014-07-09 17:10:12
【问题描述】:

我需要一些关于在 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 ;

这似乎没有错误地执行,但没有在“标签”列中插入任何内容, 知道为什么吗?

PS。我会很感激那些用“-”评价这篇文章的人给我写一个 PM 并告诉我我做错了什么:)。谢谢。

【问题讨论】:

  • 那么如果用户添加说纽约市,你如何标记?代码如何知道标签名称?
  • 您希望我们为您进行研究吗?你有没有在什么地方看过?例如……这里:stackoverflow.com/questions/6296313/…
  • 对我来说,这似乎在服务器端代码(例如 php)上得到了更好的解决,因为您需要将城市(国家?!)映射到州(标签?)。你需要在 MySQL 中解决这个问题吗?
  • 在 MySql 中并不需要这样做。我只想了解一些关于触发器的知识。
  • 您应该将字符串 California 用引号括起来。

标签: mysql sql


【解决方案1】:

您不能使用插入语句来更新当前正在处理的行。您应该使用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 包含触发器示例。你应该仔细阅读。

【讨论】:

  • 我现在尝试将它用于通过 html 表单发送的数据。当用户说他的名字是:John Doe 并且他来自洛杉矶时,我想给他添加标签“California”。有什么需要添加而我错过了吗?
  • 不,您必须执行一次 create tablecreate trigger 语句,例如使用 PHPMyAdmin。如果您随后向表中插入某些内容,则会执行触发器。
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多