Mysql 内部联接是否是此处要使用的正确联接?
我需要为一个用户更新两个不同表中同名的列。该列为Mysql 内部联接是否是此处要使用的正确联接?,mysql,sql,join,Mysql,Sql,Join,我需要为一个用户更新两个不同表中同名的列。该列为userCanMessage userMain userId | userCanMessage 1 | 0 用户设置 userId | userCanMessage | userCanAdd 1 | 0 | 0 整个事情都是这样组织的,这是有充分理由的 如果我想为userId=1更新两个表中的userCanMessage,那么在一个查询中最安全的方法是什么 目前的情况是: update userMa
userCanMessage
userMain
userId | userCanMessage
1 | 0
用户设置
userId | userCanMessage | userCanAdd
1 | 0 | 0
整个事情都是这样组织的,这是有充分理由的
如果我想为userId=1
更新两个表中的userCanMessage
,那么在一个查询中最安全的方法是什么
目前的情况是:
update userMain inner join userSettings on userMain.userId = userSettings.userId
set userMain.userCanMessage = 1,
userSettings.userCanMessage = 1
where userMain.userId = 1;
这里,
userMain
是用户的主表,userSettings
是保存设置的表。更新需要影响两个表,首先是userMain
。为什么要使用JOIN
?让它成为两个简单的查询
$sql1 = "UPDATE userMain SET userCanMessage WHERE userId=?";
$sql2 = "UPDATE userSettings SET userCanMessage WHERE userId=?";
$stmt1 = $db_usag->prepare($sql1);
$stmt2 = $db_usag->prepare($sql2);
$stmt1->bind_param('d', $param);
$stmt2->bind_param('d', $param);
$stmt1->execute();
$stmt2->execute();
$stmt1->close();
$stmt2->close();
不使用两个单独的查询有什么具体原因吗?
整个事情都是以这种方式构造的,这是一个很好的原因。
-也许你应该分享一下原因,跨表复制字段很少是一个好主意。此外,要使用哪种连接取决于如果userId在userSettings中不存在,您希望发生什么。如果userMain中的userId没有在userSettings中退出,您还想更新它吗?@Daniel当用户被设置(验证)时,会在userMain
以及userSettings
中创建一条记录。因此,两个表中都会有一条记录。否,userMain
中的userId
如果在userSettings
中找不到,则不应更新。虽然这样的事情不太可能发生。@arunmoezhi让事情变得更容易。对于这个例子,我只使用了一个字段。还有更多。@在这种情况下,jmenezes内部联接没有坏处,因为您是基于用户ID进行更新的,为了加快更新速度,请确保两个表中的数据类型相同,长度相同,例如int(11),并对它们进行索引。