【问题标题】:SQL trigger not working when deleting a record删除记录时 SQL 触发器不起作用
【发布时间】:2018-01-23 13:25:09
【问题描述】:

我有以下触发器:

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

'scores' 表有两个外键,如下所述:

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 后更新“用户”上的“飞镖投掷”字段。由于外键,每当“游戏”被删除时,相应的“分数”记录也将被删除。在那一刻之后或之前,'user'.'darts_throw' 应该使用触发器更新。

【问题讨论】:

  • 为什么不用delete cascade自动删除呢?
  • 我把标签改成了 MySQL,因为语法叫 MySQL。
  • @juergend 如果我错了,请原谅,但是,'scores' 和 'users' 表没有关系。当 'scores' 中的记录被删除时,您将如何使用 delete cascade 更新 'users' 表?
  • 听起来好像有关系。不,那么你不能在没有关系的情况下自动删除。顺便说一句,您谈论的 GAME 表并未出现在您的代码中。
  • 所以我想问题是在触发之前还是之后触发分数中的 on delete。

标签: mysql sql database triggers


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2014-11-11
    • 2011-03-17
    相关资源
    最近更新 更多