我有一张桌子'匹配'喜欢
id|user1|user2|paired
--+-----+-----+--------+
1 |U_1 |null |false
我需要匹配新用户' U_2'到paired = false的记录,如果没有找到未配对的行,则在表中创建一个新条目。
此数据库连接到多个用户可能尝试配对的服务器,因此我需要找到最快的解决方案,使其快速,因此它不会长时间锁定表。
我提出的解决方案是
int matchId = select id from match where ((user1 != 'U_2') AND (paired = false));
if(matchId > 0)
then
update table match set user2 = 'U_2' where id = matchId;
else
insert new row.
请建议更好的方法。
提前致谢。
答案 0 :(得分:3)
单个陈述可以做其中一个:
INSERT INTO match
(user1, paired, user2)
VALUES
('U_2', false, 'U_2') -- either insert this
ON DUPLICATE KEY UPDATE
user2 = VALUES(user2); -- or update this
与
一起PRIMARY KEY(user1, paired) -- a UNIQUE key to control what is "DUPLICATE"