UPDATE, проблема с уникальностью

ddurach

Новичок
UPDATE, проблема с уникальностью

В системе существует такой объект как счетчики. Каждый счетчик имеет имя, скажем A, B,C ... Имена - уникальные, т.е. два счетчика А в системе быть не может. Счетчики редактируются списком, на одной странице. Во время сохранения выполняется цепочка UPDATE'ов, например

UPDATE counters SET name = 'A', value = '1' WHERE id='100';
UPDATE counters SET name = 'B', value = '2' WHERE id='101';

При редактировании могут меняться как имя так и значение.

Проблема:
Если оператору захочется поменять имена счетчиков, А -> B, а B->A, то возникает конфликт ключей (поле name - уникальное), т.к. при попытке переименовать А в B счеткик B еще присутствует в базе.

Вариант решения пока один - убрать ключ, но этого не хотелось бы делать.
 

vasa_c

Новичок
Заменить "A" -> "Какой-нить отстой"
Заменить "B" -> "A"
Заменить "Какой-нить отстой" -> "B"
 

asm

Пофигист
Сначала удалить оба(один), потом вставить оба(один)
 

ddurach

Новичок
vasa_c
Как-то некрасиво с точки зрения организации кода.
Я думаю о том, чтоб временно удалять ключ (а после обновления восстанавливать), но это приведет небольшим тормозам...
 

vasa_c

Новичок
А только с двумя полями такое возможно или такое тоже м.б:
A->B->C->D->E->...->A
?

Если это не является слишком уж частым случаем, то можно и не заморачиваться вообще.
А если оператору уж взбредет в голову такое сделать, то пусть делает так:
A->tmp
B->A
tmp->B
 

ddurach

Новичок
asm
Видимо это и будет наиболее элегантным решением, хотя придется сначала все выгрести, обновить поля в PHP, потом все удалить и запихнуть назад.
 

asm

Пофигист
ddurach
необязательно:
PHP:
DELETE FROM counters WHERE id='100' or id='101';

INSERT INTO counters SET name = 'A', value = '1', id='100';
INSERT INTO counters SET name = 'B', value = '2', id='101';
 

ddurach

Новичок
asm
Дело в том, что у меня кроме тех полей что я обновляю есть еще и другие, которые не обновляются. При удалении их значения пропадут.
 
Сверху