如何基于mysql中不存在的其他表进行更新?
这是我使用的数据库服务器: 服务器类型:MariaDB 服务器连接:未使用SSL 服务器版本:10.5.8-MariaDB-MariaDB服务器 协议版本:10 我有一个用户表,其中一个值是isGroupLeader 另一个表是Groups,其中组有领导者 一个用户可以是多个组的成员 当我更改领导时,我想检查旧领导是否仍然是其他组的领导。 如果他不是另一个小组的组长,那么我会将他的isGroupLeader设置为false 同样在伪代码中:如何基于mysql中不存在的其他表进行更新?,mysql,sql,mariadb,Mysql,Sql,Mariadb,这是我使用的数据库服务器: 服务器类型:MariaDB 服务器连接:未使用SSL 服务器版本:10.5.8-MariaDB-MariaDB服务器 协议版本:10 我有一个用户表,其中一个值是isGroupLeader 另一个表是Groups,其中组有领导者 一个用户可以是多个组的成员 当我更改领导时,我想检查旧领导是否仍然是其他组的领导。 如果他不是另一个小组的组长,那么我会将他的isGroupLeader设置为false 同样在伪代码中: if (TheUser.userID is NOT i
if (TheUser.userID is NOT in (groupLeader column of Groups table)) {
TheUser.isGroupLeader = false;
}
如何在MySQL查询中执行此操作?您可以使用INSERT、UPDATE和DELETE into groups上的触发器来维护users表中isGroupLeader列的状态。在插入时,将groupLeader的isGroupLeader标志设置为true。更新时,您需要设置新groupLeader值的标志,如果他们不是另一个组的组长,则可能需要清除旧groupLeader值的标志。删除时,如果用户不再是任何组的组长,请清除用户的isGroupLeader标志。请注意,UPDATE和DELETE触发器必须在UPDATE/DELETE之后运行,以确保EXISTS子句与正在更新或删除的行不匹配 在组上插入后创建触发器addLeader 每行 开始 更新用户 设置isGroupLeader=true 其中userID=NEW.groupLeader; 终止 在对组进行更新后创建触发器UpdateReader 每行 开始 更新用户 设置isGroupLeader=userID=NEW.groupLeader 或存在从groupLeader=OLD.groupLeader的组中选择* 其中userID INOLD.groupLeader,NEW.groupLeader; 终止 在删除组后创建触发器deleteLeader 每行 开始 更新用户 SET isGroupLeader=EXISTS从groupLeader=OLD.groupLeader的组中选择* 其中userID=OLD.groupLeader; 终止
@代码88这回答了你的问题吗?如果没有,你能提供更多的信息来帮助回答吗?谢谢你的时间,但我还没有测试它。我想我可以从你的回答中找到答案。@Coder88别担心,我只是想看看你是否需要更多的帮助。在测试之前你不应该接受。