【发布时间】: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