Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于mysql中不存在的其他表进行更新?_Mysql_Sql_Mariadb - Fatal编程技术网

如何基于mysql中不存在的其他表进行更新?

如何基于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

这是我使用的数据库服务器:

服务器类型:MariaDB

服务器连接:未使用SSL

服务器版本:10.5.8-MariaDB-MariaDB服务器

协议版本:10

我有一个用户表,其中一个值是isGroupLeader

另一个表是Groups,其中组有领导者

一个用户可以是多个组的成员

当我更改领导时,我想检查旧领导是否仍然是其他组的领导。 如果他不是另一个小组的组长,那么我会将他的isGroupLeader设置为false

同样在伪代码中:

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别担心,我只是想看看你是否需要更多的帮助。在测试之前你不应该接受。