插入/更新事件的MySQL触发器
所以我有两张这样的桌子…插入/更新事件的MySQL触发器,mysql,triggers,insert,insert-update,Mysql,Triggers,Insert,Insert Update,所以我有两张这样的桌子… ext_words ------------- | id | word | ------------- | 1 | this | ------------- | 2 | that | ------------- | 3 | this | ------------- ext_words_count --------------------- | id | word | count | --------------------- | 1 | this | 2
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
我正在尝试创建一个触发器,该触发器将:
- 更新
ext\u words\u count.count,当
更新时进行计数李>ext\u words.word
- 如果更新
时ext\u words
中不存在ext\u words
,我想将其插入ext\u words.word
并将ext\u words\u count
设置为1count
1.和
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 ;
非常感谢您的建议和指导。或者可能是我忽略的另一种方法,并且总是提前感谢
更新:我选择使用两个触发器,一个用于插入,一个用于更新,因为我对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 ;
及
插入查询工作正常,但是更新查询没有更新
word\u count
。我在更新查询中遗漏了什么吗?在Grijesh的完美帮助和他使用条件语句的建议下,我能够得到一个执行这两项任务的触发器。再次感谢格里耶什
DELIMITER $$
CREATE TRIGGER update_count AFTER INSERT ON ext_words
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE word = NEW.word) THEN
INSERT INTO ext_words_count (word) VALUES (NEW.word);
ELSE
UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word;
END IF;
END $$
DELIMITER;
避免使用像count这样的关键字,因为sql方法使用它 有时会出现创建错误,但有时运行良好
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
SELECT count INTO @x FROM ext_words_count LIMIT 1;
UPDATE ext_words_count
SET count = @x + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;
你可能想看看这个,我的解决方案有效吗?我想提高的结果是什么。记住,不能更新在其中调用触发器的同一个表MySQL@GrijeshChauhan-谢谢你的链接!我无法得到你的答案,但这是因为我不熟悉MySQL中的条件语句,而不是因为你的解决方案。我的意思是,当更新ext_单词时,如果单词不在ext_单词中,那么我想插入它并使计数为1。否则,如果单词在ext\u words\u count中,请将计数增加1…明白了,当然我的查询不起作用,等等…我这里有一个快速问题。如果您以逗号分隔的形式将单词存储在其他一些表中,如“this,that”,我们是否可以在此表上写入一个触发器来拆分值并将其存储在ext_words和ext_words_count中?很好,那么哪种形式帮助您实现了DB.exchange?从未收到任何人的消息:(我刚刚浏览了一些文章。再次感谢您的帮助并将我指向另一个站点!这个触发器在我的MySQL服务器中非常有效,可以过滤掉多余的插入。
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
SELECT count INTO @x FROM ext_words_count LIMIT 1;
UPDATE ext_words_count
SET count = @x + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;