我有一个MySQL表,如下所示:
+----+----------------------+----------+-----------+
| id | fullname | username | password |
+----+----------------------+----------+-----------|
| 1 | John Doe | jdoe | pass |
| 2 | Bob Doe | bdoe | pass |
+----+----------------------+----------+-----------+
基本上我想要做的是'翻转'同一查询中两个用户的ID,以避免密钥重叠(id是主键)。
所以我希望它看起来像这样:
+----+----------------------+----------+-----------+
| id | fullname | username | password |
+----+----------------------+----------+-----------|
| 1 | Bob Doe | bdoe | pass |
| 2 | John Doe | jdoe | pass |
+----+----------------------+----------+-----------+
我尝试了以下内容,但它们无效:
UPDATE users SET id=1 WHERE id=2, id=2 WHERE id=1;
UPDATE users SET id=CASE id WHEN 1 THEN 2 WHEN 2 THEN 1 END WHERE id IN (1,2);
他们分别产生了这些错误:
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
抱歉新手问题。我还是MySQL的初学者。
答案 0 :(得分:0)
你可以做以下的黑客攻击,但它确实是一个黑客攻击,不建议用于任何严重目的:
START TRANSACTION;
UPDATE USERS SET id=0 WHERE id=1;
UPDATE USERS SET id=1 WHERE id=2;
UPDATE USERS SET id=2 where id=0;
COMMIT;