【发布时间】:2013-04-05 05:56:21
【问题描述】:
所以我有两张这样的桌子...
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
我正在尝试创建一个触发器,它将:
- 当
ext_words.word更新时更新ext_words_count.count。
为了让事情更复杂,
- 如果更新
ext_words时ext_words_count中不存在ext_words.word,我想将其插入ext_words_count并将count设置为1。
我一直在研究类似的问题:
1.Before / after insert trigger using auto increment field,和
2.Using Trigger to update table in another database
试图将 2 结合起来。这是我到目前为止所拥有的:
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
UPDATE ext_words_count
SET word_count = word_count + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;
非常感谢任何建议和指导。或者可能是我忽略的另一种方法,并且一如既往地提前感谢!
更新:
我选择使用 2 个触发器,一个用于 INSERT,一个用于 UPDATE,因为我对 MySQL 中的条件语句不太熟悉。
DELIMITER $$
CREATE TRIGGER insert_word AFTER INSERT ON ext_words
FOR EACH ROW
BEGIN
INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word);
END;
$$
DELIMITER ;
和
DELIMITER $$
CREATE TRIGGER update_word AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
UPDATE ext_words_count
SET word_count = word_count + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;
INSERT 查询运行良好,但是 UPDATE 查询没有更新word_count。我在更新查询中遗漏了什么......?
【问题讨论】:
-
您可能想查看此内容,MySQL Fire Trigger for both Insert and Update 我的解决方案有效吗?我想改进的结果是什么。请记住,您不能更新在 MySQL 中调用 trigger 的同一张表
-
@GrijeshChauhan - 感谢您的链接!我无法让您的答案起作用,但那是因为我对 MySQL 中的条件语句不熟悉,而不是因为您的解决方案。
-
我的意思是,当 ext_words 更新时,如果单词不在 ext_words_count 中,那么我想插入它并使计数为 1。否则,如果单词在 ext_words_count 中,则将计数增加 1.. .
-
当然知道了,因为我的查询将不起作用等等...
-
我有一个简短的问题。如果您将单词以逗号分隔的形式存储在“this,that”之类的其他表中,我们可以在该表上编写触发器来拆分值并将其存储在 ext_words 和 ext_words_count 中吗?
标签: mysql triggers insert insert-update