在一个语句中更改两个用户的id

时间:2014-05-30 14:37:08

标签: mysql

我有一个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的初学者。

1 个答案:

答案 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;