像MySQL触发器一样,但总体上来说呢?

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用户,不如将触发器作为“整体”?我的意思是

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$$

解决方法:

正如杰克指出的那样,触发器主要用于执行与单行更改有关的动作,通常是更改另一行.当然,您可以实现对重复的每一行在很大程度上相同的结果集上(冗余)执行相同操作的逻辑,但是问题是,为什么不在原始UPDATE之后不发出单个UPDATE语句?您可能有充分的理由,因此,杰克(Jake)对总体情况有疑问.

例如(语法未经测试,但总体思路成立)

UPDATE u set u.customer_count = x.newcount
from
user u inner join 
(
select user, count(*) as newcount
from user group by customer_id
) x
上一篇:关于confluent集成环境的启动问题,为什么无法一键全部启动,而是报错Error: ZooKeeper failed to start


下一篇:ssm使用全注解实现增删改查案例——index.jsp