Jak poucza instrukcja, w przypadku wystąpienia zduplikowanej wartości w kolumnie typu UNIQUE
oba poniższe polecenia robią to samo:
INSERT INTO t1 (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE t1 SET c=c+1 WHERE a=1;
Czyli nie umieszczają nowego rekordu, tylko aktualizują zawartość istniejącego i stanie się tak nawet wtedy, gdy zażyczę sobie zmodyfikowania jego indeksu.
Pytanie: czy w SQL da się napisać polecenie, które:
- spróbuje wstawić nowy rekord,
- w razie wykrycia duplikatu w kolumnie typu
UNIQUE
zmodyfikuje wpisywaną wartość, np wedle wzorca kn = kn +1, - i wstawi nowy rekord z tak poprawioną wartością / wartościami.
Czy da się to w ogóle zrobić w SQL i czy taka jest praktyka?
Czy może trzeba z poziomu PHP odczytać błąd i dopiero w oparciu i jego treść podejmować dalsze działania.
Ew. najpierw osobnym poleceniem sprawdzić, czy rekord z polem o takiej wartości już istnieje, a dopiero później wczytywać.