sql: изменить первичный ключ на другой список уникальных элементов - PullRequest
0 голосов
/ 05 октября 2011

Я хочу изменить идентификаторы таблицы на другое уникальное значение.Это упрощенный пример:

CREATE TABLE IF NOT EXISTS test (
  id int(11) NOT NULL,
  reverse_id int(11) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY reverse_id (reverse_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO  test (id, reverse_id) VALUES ('1',  '2'), ('2',  '1');

UPDATE test SET id = reverse_id;

# Duplicate entry '2' for key 'PRIMARY' 

Я ищу команду, которая проверяет уникальность элементов id только в конце ОБНОВЛЕНИЯ.

[Я знаю, что могусоздайте вторую строку и измените статус этой строки на основной, затем я могу обновить идентификаторы и сбросить основной статус, но я хочу иметь одну команду, без добавления или изменения других строк, таблиц]

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Насколько я знаю, это невозможно с MySQL.

Он не оценивает ограничение на уровне оператора (он делает это на уровне строки во время обработки), а также не позволяет определить их для отсрочки (чтобы ограничение оценивалось во время принятия).

Единственный вариант, который я вижу, если вы хотите «перенумеровать» ваш первичный ключ: отбросить первичный ключ, перенумеровать идентификаторы, а затем заново создать первичный ключ.

0 голосов
/ 05 октября 2011

Что если вы создадите таблицу, имеющую reverse_id в качестве первичного ключа? - это уникально в вашем определении, поэтому он является действительным кандидатом на первичный ключ.

Первичные ключи уникальны по определению - это ограничение мешает вам достичь того, что вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...