sql подкачивают значения первичного ключа

действительно ли возможно подкачать значения первичного ключа между двумя наборами данных? Если так, как можно было бы сделать это?

17
задан Thomas 11 May 2010 в 12:25
поделиться

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

12
ответ дан 30 November 2019 в 13:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: