这是我使用的数据库服务器:
服务器类型: MariaDB
服务器连接:不使用SSL
服务器版本: 10.5.8-MariaDB - MariaDB服务器
议定书版本: 10
我有一个用户表,其中一个值是"isGroupLeader“。
另一种情况是团体,那里的团体有领导者。
一个用户可以是多个组的连接者。
当我更换领导时,我想检查老领导是否仍然是另一组中的领导者。如果他不是另一组的领导者,我就把他的isGroupLeader设为假。
也是用伪码:
if (TheUser.userID is NOT in (groupLeader column of Groups table)) {
TheUser.isGroupLeader = false;
}如何在MySQL查询MariaDB中做到这一点?
发布于 2021-03-18 22:57:22
您可以在users表中使用INSERT、UPDATE和DELETE到groups的触发器来维护groups列的状态。在插入时,将isGroupLeader标志的groupLeader设置为true。在更新时,您需要设置新groupLeader值的标志,并可能清除旧groupLeader值的标志(如果它们不是其他组的组领导)。在删除时,如果用户不再是任何组的领导者,则清除用户的isGroupLeader标志。注意,UPDATE和DELETE触发器必须在UPDATE/DELETE之后运行,以确保EXISTS子句与正在更新或删除的行不匹配。
CREATE TRIGGER addLeader AFTER INSERT ON groups
FOR EACH ROW
BEGIN
UPDATE users
SET isGroupLeader = true
WHERE userID = NEW.groupLeader;
END
CREATE TRIGGER updateLeader AFTER UPDATE ON groups
FOR EACH ROW
BEGIN
UPDATE users
SET isGroupLeader = userID = NEW.groupLeader
OR EXISTS (SELECT * FROM groups WHERE groupLeader = OLD.groupLeader)
WHERE userID IN(OLD.groupLeader, NEW.groupLeader);
END
CREATE TRIGGER deleteLeader AFTER DELETE ON groups
FOR EACH ROW
BEGIN
UPDATE users
SET isGroupLeader = EXISTS (SELECT * FROM groups WHERE groupLeader = OLD.groupLeader)
WHERE userID = OLD.groupLeader;
ENDhttps://stackoverflow.com/questions/66700048
复制相似问题