我有下表groupToScore
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)。
发布于 2022-07-12 02:39:34
UPDATE groupToScore SET scoreName = #{scoreName} WHERE groupId = 1 and scoreId = 1;我相信mysql服务器会为您选择一个合适的索引,您可以通过在sql的顶部添加一个解释来获取惟一的sql索引信息。
explain UPDATE groupToScore SET scoreName = #{scoreName} WHERE groupId = 1 and scoreId = 1;发布于 2022-07-12 02:40:31
你不能直接使用索引。如果索引适用,SQL引擎将自动使用它。因此,您只需查询WHERE groupId = ? AND scoreId = ?。
发布于 2022-07-12 02:59:39
不能直接使用密钥名,但可以使用其表达式。试试这个:
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)
);https://stackoverflow.com/questions/72946476
复制相似问题