Mysql поменять местами строки в таблице

с помощью какого запроса можно заменить строки в таблице? например я хочу чтобы сторока с id10  и id3 поменялись местами то есть содержимое данных строк поменялись местами. заранее спасибо 

1 ответов


Из теоретических соображений, я бы сказал, что такого никогда делать не надо. Значение первичного ключа не должно меняться. Его можно вставить и удалить. Никаких изменений. Плюс в mysql + innodb  ,primary key одновременно clustered index - т.е. это не только абстрактный уникальный идентификаор записи, но и физическое расположение на диске.  

Если вопрос про единчный случай, я бы сказал - делайте как больше нравится, никакого значения не имеет как сделать лучше (хоть таблицу временную создавайте).

Если это постоянная практика, то серьезная проблема в дизайне.

Если просто академическая задача на знание mysql, я бы не менял местами PK, а наоборот, поменял бы значения всех полей кроме  PK:




update t1 a
inner join
(
select c.*
from
(
select id,name, another_id from t1
where id = 1
union
select id,name, another_id from t1
where id = 2
)c
)b
on (a.id <> b.id)
set
a.name = b.name,
a.another_id = b.another_id

WHERE a.id IN (1,2)
;