действительно ли возможно подкачать значения первичного ключа между двумя наборами данных? Если так, как можно было бы сделать это?
Давайте для простоты предположим, что у вас есть две записи
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, которое было до выполнения запроса". Однако некоторые базы данных могут не делать должной изоляции, см. например, этот вопрос (однако, выполнение вышеприведенного запроса, который, вероятно, считается обновлением нескольких таблиц, в mysql происходило в соответствии со стандартом).