【问题标题】:trigger in mysql inserts multiple rows instead of onemysql中的触发器插入多行而不是一行
【发布时间】:2019-07-12 03:53:11
【问题描述】:

我正在尝试将来自 4 个不同表的 4 列的总和插入到一个单独的表(名为 bugs)触发器中,如下所示:

SELECT 
    uat_reopened_stats.release_name,
    (uat_reopened_stats.rate_bugs + qa_reopened_stats.rate_bugs + closed_reopened_stats.rate_bugs + done_reopened_stats.rate_bugs)
INTO @releasename, @bugstotalreopenrate  
FROM qa_reopened_stats
JOIN uat_reopened_stats 
    ON qa_reopened_stats.release_name = uat_reopened_stats.release_name
JOIN closed_reopened_stats 
    ON closed_reopened_stats.release_name = uat_reopened_stats.release_name
JOIN done_reopened_stats 
    ON done_reopened_stats.release_name = uat_reopened_stats.release_name;

INSERT INTO release_stats (release_name, bugs_total_reopen_rate)
VALUES (@releasename, @bugstotalreopenrate)
ON DUPLICATE KEY UPDATE 
    release_name=@releasename,
    bugs_total_reopen_rate=@bugstotalreopenrate;
END

但是,当触发器被执行时(并且事先让 release_stats 表为空,我最终会得到 11 (!) 行!

MySQL [jira_statistics]> select * from release_stats;
+--------------+------------------------+
| release_name | bugs_total_reopen_rate |
+--------------+------------------------+
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
| 2.3.0        | 9.090909004211426      |
+--------------+------------------------+

为什么会这样?

【问题讨论】:

    标签: mysql triggers mysql-5.7


    【解决方案1】:

    由于某种原因,在将release_name 设置为表release_stats 上的主键后问题就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-30
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多