You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL触发器实现新增用户时自动更新rank表总用户数

正确SQL触发器实现方案

以下为MySQL环境下的可运行代码,核心逻辑适配你提供的表结构需求:

DELIMITER //
CREATE TRIGGER update_rank_after_user_insert
AFTER INSERT ON user_
FOR EACH ROW
BEGIN
    -- 校验新增用户归属的管理员是否存在rank统计记录
    IF NOT EXISTS (SELECT 1 FROM rank WHERE id_admin = NEW.id_admin) THEN
        -- 无记录则新增,初始用户数为1
        INSERT INTO rank (id_admin, total_user) VALUES (NEW.id_admin, 1);
    ELSE
        -- 有记录则直接对总用户数做+1更新
        UPDATE rank SET total_user = total_user + 1 WHERE id_admin = NEW.id_admin;
    END IF;
END //
DELIMITER ;

原代码问题说明

  • 未绑定触发器事件、未指定行级触发逻辑,缺少触发器基础结构
  • 未使用触发器内置NEW关键字获取新插入行的管理员ID,变量id_admin无来源无法识别
  • 字段引用错误,你提供的user_表结构中不存在username、nama_lengkap字段
  • 全表分组统计逻辑冗余,每次新增用户仅需要更新对应管理员的统计值即可,无需全表扫描,执行效率更高

历史数据对齐方案

如果需要先把现有rank表数据和user_表的历史数据校准,可先执行以下语句:

REPLACE INTO rank (id_admin, total_user)
SELECT id_admin, COUNT(id_user) FROM user_ GROUP BY id_admin;

内容的提问来源于stack exchange,提问作者Mochammad Chafiedz Afrilian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:04