У меня есть таблица MySQL со следующей схемойзначения Обновляется, из столбца с ограничением PRIMARY KEY
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(7) | NO | UNI | NULL | auto_increment |
| title | varchar(20) | NO | PRI | NULL | |
+-------+-------------+------+-----+---------+----------------+
А вот содержание в нем.
+----+-------+
| id | title |
+----+-------+
| 1 | a |
| 2 | b |
+----+-------+
Вопрос: Я хочу поменять местами значения в одном запросе, так что теперь таблица становится
+----+-------+
| id | title |
+----+-------+
| 1 | b |
| 2 | a |
+----+-------+
Я пробовал: UPDATE myTable SET title = CASE id WHEN 1 THEN "b" WHEN 2 THEN "a" END;
, но он дает мне ошибку ERROR 1062 (23000): Duplicate entry 'b' for key 'PRIMARY'
Что мне делать?
Раствора нашел здесь, в одном из звеньев, кажется, единственным способом, как сейчас, но я до сих пор ищу лучшее решение
START TRANSACTION;
UPDATE prime SET title = CASE id WHEN 1 THEN "$b" WHEN 2 THEN "$a" END;
UPDATE prime SET title = CASE id WHEN 1 THEN SUBSTRING(title,2) WHEN 2 THEN SUBSTRING(title,2) END;
COMMIT;
'id' должен быть первичным ключом и' title' уникальным. У вас это в другом месте в определении таблицы. –
Стандартное решение - нажать «b» на «c», а затем «a» на «b», а затем «c» на «a». Это вариант? – Strawberry
@Strawberry Не совсем. Мне нужно сделать это в одном запросе. –