mysql - 删除记录时 SQL 触发器不起作用

标签 mysql sql database triggers

我有以下触发器:

CREATE TRIGGER `delete_scores_trigger` AFTER DELETE ON `scores`
   FOR EACH ROW BEGIN
UPDATE `users` 
   SET `darts_thrown` = ((SELECT `darts_thrown` 
                            FROM (SELECT * FROM users) as utable 
                           WHERE `id` = old.user_id) - old.darts_thrown) 
 WHERE `users`.`id` = old.user_id;
   END

“分数”表有两个外键,如下所示:

ALTER TABLE `scores`
  ADD CONSTRAINT `scores_game_id_foreign` FOREIGN KEY (`game_id`) 
    REFERENCES `games` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `scores_user_id_foreign` FOREIGN KEY (`user_id`) 
    REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;

我想在删除 SCORE 后更新“用户”上的“darts_ thrown”字段。由于外键的存在,每当删除“游戏”时,相应的“分数”记录也会被删除。在那一刻之后或之前,应使用触发器更新 'user'.'darts_thron'。

最佳答案

https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html引用操作部分中有一条注释级联外键操作不会激活触发器。

关于mysql - 删除记录时 SQL 触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48402854/

相关文章:

mysql - 图像数据库

sql - 如何在 SQL Server 中使用基于 2 列的 group by

sql - PL/pgSQL 检查一行是否存在

MySQL : Use Stored Procedure in SELECT and FROM

mysql - 嵌套表产品查询mysql

mysql - 当文件名的第一个字符是 # 时如何恢复 mysql 数据库(.MYD、.MYI、.frm)

java - 生产者 - 使用 MySQL DB 的消费者

python - flask mysql 不为空

android - 如何在另一个 Activity 上显示 ListView 所选项目的详细信息?

c++ - 结合 mysql_real_escape 字符串与 sprintf