Ответ 1
Пусть для простоты предположим, что у вас есть две записи
id name
---------
1 john
id name
---------
2 jim
как из таблицы t (но они могут поступать из разных таблиц)
Вы могли бы сделать
UPDATE t, t as t2
SET t.id = t2.id, t2.id = t.id
WHERE t.id = 1 AND t2.id = 2
Примечание: Обновление первичных ключей имеет другие побочные эффекты, и, возможно, предпочтительным подходом было бы оставить первичные ключи такими, какими они есть, и поменять значения всех остальных столбцов.
Протест:
Причина, по которой работает t.id = t2.id, t2.id = t.id
, заключается в том, что в SQL обновление происходит на уровне транзакции. t.id
не является переменной и =
не является назначением. Вы могли бы интерпретировать его как "установить t.id на значение t2.id перед эффектом запроса, установить t2.id в значение t.id, имевшееся до эффекта запроса". Тем не менее, некоторые базы данных могут не выполнять надлежащую изоляцию, например, question (однако, работа над запросом, который, вероятно, считается обновлением нескольких таблиц, ведет себя в соответствии с стандарт в mysql).