MySQL trigger On Insert/Update events(MySQL 在插入/更新事件上触发)
问题描述
所以我有两张这样的桌子...
So I have two tables like this...
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
我正在尝试创建一个触发器,它将:
I am trying to create a trigger that will:
- 在更新
ext_words.word
时更新ext_words_count.count
.
- update
ext_words_count.count
whenext_words.word
is updated.
为了进一步复杂化,
- 如果
ext_words.word
在ext_words
更新时ext_words_count
中不存在,我想把它插入到ext_words_count
并将count
设置为 1.
- if
ext_words.word
does not exist inext_words_count
whenext_words
is updated, I would like to insert it intoext_words_count
and setcount
as 1.
我一直在看类似的问题:
1. 使用自增字段插入前/后触发器 和
2. 使用触发器更新另一个数据库中的表>
试图结合 2.这是我目前所拥有的:
I have been looking at similar questions:
1. Before / after insert trigger using auto increment field, and
2. Using Trigger to update table in another database
trying to combine the 2. Here is what I have so far:
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 ;
非常感谢任何建议和指导.或者可能是我忽略的另一种方法,并一如既往地提前致谢!
Any advice and direction is greatly appreciated. Or possibly another method that I have overlooked and as always thanks in advance!
更新:
我选择使用 2 个触发器,一个用于 INSERT,一个用于 UPDATE,因为我不太熟悉 MySQL 中的条件语句.
UPDATE:
I have opted for using 2 triggers, one for INSERT and one for UPDATE because I am not that familiar with conditional statements in 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
.我在更新查询中遗漏了什么吗..?
The INSERT query is working great, however the UPDATE query is not updating word_count
. Is there something I missed in the update query..?
推荐答案
在 Grijesh 的完美帮助和他使用条件语句的建议下,我能够获得同时执行这两项任务的 ONE 触发器.再次感谢 Grijesh
With Grijesh's perfect help and his suggestion to use conditional statements, I was able to get ONE trigger that does both tasks. Thanks again 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;
这篇关于MySQL 在插入/更新事件上触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MySQL 在插入/更新事件上触发


- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- SQL 临时表问题 2022-01-01