308 PHP i MySQL dla każdego
Takie zachowanie jest zrozumiałe, gdyż chroni nas przed przypadkowym wprowadzeniem do bazy nieuprawnionych duplikatów kluczy i indeksów. Istnieje jednak instrukcja, która w razie próby wprowadzenia do tabeli nowego wiersza, zawierającego już istniejącą w tabeli wartość unikalnego klucza lub indeksu, zastąpi starą wartość wartością nową. Ściślej usunie stary rekord, a na jego miejsce wprowadzi nowy. Jest to więc odpowiednik dwóch ręcznie wykonanych operacji: DELETE i INSERT. Tą instrukcją jest REPLACE. Ma ona schematyczną postać:
REPLACE [INTO] tabela [(kolumnal. kolumna2.....kolumnaN)] VALUES (wartośćl.
wartość2.....wartośćN)
Jest to więc składnia analogiczna do instrukcji INSERT, REPLACE zachowuje się bowiem tak samo jak INSERT, z wyjątkiem sytuacji opisanej wyżej, czyli próby wprowadzeni zduplikowanego klucza lub indeksu. Jeśli zatem chcemy wykonać operację wprowadzenia do przykładowej tabeli OSOBA nowego wiersza zawierającego pole Id o wartości 1, który ma zastąpić już istniejący w tej tabeli wiersz, należałoby wykonać polecenie: REPLACE INTO Osoba VALUES(1. 'Jan'. 'Janowski'. 1990. 'Gliwice'):
Warto zwrócić uwagę na odpowiedź serwera:
Query OK. 2 rows affected (0.03 sec)
która wskazuje, że zapytanie wpłynęło na 2 rekordy. Tak jest w istocie. W rzeczywistości instrukcja ta zachowała się tak, jakby wykonane zostały jedno po drugim następujące polecenia:
DELETE FROM Osoba WHERE id-1;
INSERT INTO Osoba VALUES(1. 'Jan'. 'Janowski'. 1990. 'Gliwice'):