首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于唯一索引的MySql条件

基于唯一索引的MySql条件
EN

Stack Overflow用户
提问于 2022-07-12 02:37:15
回答 3查看 28关注 0票数 0

我有下表groupToScore

代码语言:javascript
复制
CREATE TABLE `groupToScore` (
  `groupId` int NOT NULL,
  `scoreId` varchar(255) NOT NULL,
  `scoreName` varchar(255) DEFAULT NULL,
  UNIQUE KEY `gToS` (`groupId`,`scoreId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

这对(groupId, scoreId)构成了此表的唯一键gTos

我的问题是如何在UPDATE子句中使用gTos来执行WHERE?看起来有点像,UPDATE groupToScore SET scoreName = #{scoreName} WHERE gToS is equal to (groupId, scoreId)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-12 02:39:34

代码语言:javascript
复制
UPDATE groupToScore SET scoreName = #{scoreName} WHERE groupId = 1 and scoreId = 1;

我相信mysql服务器会为您选择一个合适的索引,您可以通过在sql的顶部添加一个解释来获取惟一的sql索引信息。

代码语言:javascript
复制
explain UPDATE groupToScore SET scoreName = #{scoreName} WHERE groupId = 1 and scoreId = 1;
票数 1
EN

Stack Overflow用户

发布于 2022-07-12 02:40:31

你不能直接使用索引。如果索引适用,SQL引擎将自动使用它。因此,您只需查询WHERE groupId = ? AND scoreId = ?

票数 1
EN

Stack Overflow用户

发布于 2022-07-12 02:59:39

不能直接使用密钥名,但可以使用其表达式。试试这个:

代码语言:javascript
复制
UPDATE groupToScore SET scoreName = #{scoreName} WHERE (`groupId`,`scoreId`) = (groupId, scoreId)
--e.g for a single match
insert groupToScore values(1,3,'dd'),(1,2,'xx');
UPDATE groupToScore SET scoreName = 'aa' WHERE (`groupId`,`scoreId`) = (1, 2);

--e.g for multiple matches
UPDATE groupToScore SET scoreName = 'kk' WHERE (`groupId`,`scoreId`) in (
(1,2),
(1,3)
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72946476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档