Mysql触发器插入记录或更新,如果它已经存在? [复制]

Posted

技术标签:

【中文标题】Mysql触发器插入记录或更新,如果它已经存在? [复制]【英文标题】:Mysql Trigger to INSERT a record or UPDATE if it already exists? [duplicate] 【发布时间】:2018-02-01 17:22:58 【问题描述】:

我有 2 张桌子 第一个表 word_cloud (auto inc)、predefined_text、content_id。 第二个表 word_cloud_count (auto inc),predefined_text,content_id,count 。 我在将数据插入 word_cloud 时调用触发器,它基本上对单词进行分组,计算计数并将其插入 word_cloud_count

word_cloud 表由

id | predefined_text | content_id
---------------------------------
 1 | ABC             | 1
 2 | ABC             | 1
 3 | ABC             | 1
 4 | XYZ             | 2
 5 | XYZ             | 2
 6 | XYZ             | 2
 7 | XYZ             | 1
 8 | ABC             | 2
 9 | ABC             | 2
10 | ABC             | 2

word_cloud_count 由

id | predefined_text | content_id | count
-----------------------------------------------
 1 | ABC             | 1          |  3
 2 | XYZ             | 2          |  3
 3 | ABC             | 2          |  3
 4 | XYZ             | 1          |  1

触发函数

CREATE TRIGGER word_cloud_count_insert after insert on word_cloud
    INSERT INTO word_cloud_count (Word,content_id ,count )
    SELECT predefined_text,content_id, count(*)
    FROM word_cloud
    group by predefined_text,content_id

一切正常,值被插入到 word_cloud_count 表中

但是我的问题是每次将数据插入 word_cloud 时都会调用触发器并将重复值存储到 word_cloud_count 中

如何避免这种情况

任何建议都会有很大帮助,在此先感谢

【问题讨论】:

你的触发器没有意义。例如,“之前”或“之后”在哪里?还要显示表的结构,以及您希望触发器执行的操作。 @GordonLinoff 每次将值插入 word_cloud 时,都会调用我的触发器并将相同的值插入 word _cloud_count 表中,如果不存在相同的值,我希望我的触发器更新计数器它应该插入。 【参考方案1】:

您可以使用 Insert into .... om duplicate 之类的 upsert 查询。 在这里查看Insert into a mysql table or update if exists

【讨论】:

以上是关于Mysql触发器插入记录或更新,如果它已经存在? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 使用 PHP 更新或插入 [重复]

如何检查记录是不是已经存在,然后在 laravel 中更新或插入?

mysql的更新问题

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

如果特定列的字段存在,如何更新

mysql 条件插入 - 如果不存在插入