Mysql - обновить запрос с уникальным ключом - после Slide_id = 4

0

У меня есть этот скрипт SQL http://sqlfiddle.com/#!9/c04ff7/2 (я не уверен, как скопировать код здесь на StackOverflow в качестве скрипта SQL)

Я попытался вручную обновить Slide_id до 5, но это порождает ошибку уникальности.

То, что я пытаюсь сделать, это обновить course таблицы таким образом, чтобы FROM slide_id=3 onwards every slide_id is incremented to 1 example slide_id=4 would be 5 slide_id=5 would be 6 and so on

Это возможно с помощью инструкции Update, не выбрасывая уникальную ключевую ошибку

CREATE TABLE 'course' (
  'id' int(11) NOT NULL,
  'slide_id' int(11) NOT NULL,
  'course_id' int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE 'course'
  ADD PRIMARY KEY ('id'),
  ADD UNIQUE KEY 'slide_id' ('slide_id','course_id');

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table 'course'
--
ALTER TABLE 'course'
  MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1026;
  

INSERT INTO 'course' ('id', 'slide_id', 'course_id') VALUES
(489, 1, 6),
(490, 2, 6),
(491, 3, 6),
(492, 4, 6),
(493, 5, 6),
(494, 6, 6),
(495, 7, 6),
(496, 8, 6),
(497, 9, 6),
(498, 10, 6),
(499, 11, 6),
(500, 12, 6),
(501, 13, 6),
(502, 14, 6),
(507, 15, 6),
(509, 16, 6),
(511, 17, 6),
(512, 18, 6),
(513, 19, 6),
(517, 20, 6),
(518, 21, 6),
(520, 22, 6),
(521, 23, 6),
(522, 24, 6),
(524, 25, 6),
(525, 26, 6),
(526, 27, 6),
(527, 28, 6),
(528, 29, 6),
(529, 30, 6),
(531, 31, 6),
(532, 32, 6),
(533, 33, 6),
(1025, 34, 6);
Теги:

1 ответ

3
Лучший ответ

Используйте предложение ORDER BY, чтобы оно начиналось с самого высокого значения, поэтому оно не создавало дубликатов:

UPDATE course SET slide_id = slide_id + 1
WHERE slide_id >= 3
ORDER BY slide_id DESC

Если ваши обновления не были заказаны так, вы можете использовать такое решение, как таблица обновлений с уникальным столбцом

  • 0
    Это выглядит более аппетитно, чем альтернатива удаления уникального ограничения только для обновления +1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню