自动更新MySQL列

时间:2015-04-30 16:04:49

标签: mysql sql

我有两张桌子:

userGroups

id  name  users
===================
1   abcd     2
2   efgh     1

users

id  name  groupId
===================
1   Usr1     1
2   Usr2     2
3   Usr3     1

我正在尝试根据群组中的userGroups.users用户进行count自动更新。

有办法吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用更新/插入/删除触发器来实现此目的。

delimiter //
CREATE TRIGGER grp_count_trigger AFTER UPDATE ON users
 FOR EACH ROW
 BEGIN
     update userGroups g
     left join 
     (
        SELECT groupId, count(*) as cnt
        from users
        group by groupId 
     ) u on u.groupId = g.id
     set g.users = u.cnt;
 END
//
delimiter ;

您还需要对插入和删除执行此操作。

答案 1 :(得分:0)

更新users表后,检查groupId是否已更改。如果是这样,请增加新groupId的计数,并减少旧groupId的计数。

对于插入和删除,增加或减少组的计数。

CREATE TRIGGER my_update_trigger AFTER UPDATE ON users
    FOR EACH ROW if(NEW.groupId <> OLD.groupId)
        UPDATE userGroups SET users = users + 1 WHERE groupId = NEW.groupId;
        UPDATE userGroups SET users = users - 1 WHERE groupId = OLD.groupId;
    END IF

CREATE TRIGGER my_insert_trigger AFTER INSERT ON users
    FOR EACH ROW UPDATE userGroups SET users = users + 1 WHERE groupId = NEW.groupId;

CREATE TRIGGER my_delete_trigger AFTER DELETE ON users
    FOR EACH ROW UPDATE userGroups SET users = users - 1 WHERE groupId = OLD.groupId;

对于插入触发器,您可能需要检查计数行是否存在,如果不存在计数1的插入,而不是执行将计数增加1的更新。