如何编写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
相关产品推荐
相关产品推荐

