CREATE TRIGGER `after_customer_insert`
AFTER INSERT ON `customer`
FOR EACH ROW BEGIN
UPDATE `user`
SET
`customers_count` = `customers_count` + 1
WHERE `id` = NEW.`user_id`;
END$$
不是为UPDATE user
中的每个新行调用customer
,而是可以将触发器作为“整体”?我的意思是
CREATE TRIGGER `after_customer_insert`
AFTER INSERT ON `customer`
BEGIN
UPDATE `user`
SET
`customers_count` = (
SELECT COUNT(`id`)
FROM `customer`
WHERE `user_id` = `id`
)
END$$
答案 0 :(得分:2)
触发器主要用于执行与单个行上的更改相关的操作,通常会更改另一行,如Jake所指出的那样。当然,您可以实现逻辑(冗余地)在更新的每一行的大致相同的结果集上执行相同的操作,但问题是,为什么不在原始{{{}之后发出单个UPDATE
语句。 1}?你可能有充分的理由,因此杰克对整体情况提出质疑。
e.g。 (语法不测试,但总体思路成立)
UPDATE
答案 1 :(得分:1)
嗯,它会起作用,因为我自己做过一次。每次新的插入都会发生时,我会在桌子上订购一些东西但是在我看来这不是好习惯。您的代码可能会有所改进,这将为您省去麻烦。
此外,即使此触发器将处理表中的所有行,每次INSERT发生时都会调用它...
请您提供全面的情况说明,也许我可以帮助您找到更好的解决方案......: - )
答案 2 :(得分:0)
可能需要此类触发器的唯一情况是查询:
INSERT INTO customer SELECT * FROM customer_old;
但是对于这种情况,您可以在查询之前禁用触发器,执行插入更新并启用触发器。
我非常怀疑,您经常会一次插入多个客户。或者即使它是真的,你也试图进行过早的优化。