Spróbuj wstawić nowy rekord do tablicy.
Składnia polecenia REPLACE jest następująca: (patrz Listing 1.0) lub (patrz Listing 2.0) lub też (patrz Listing 3.0) Polecenie REPLACE działa dokładnie tak samo jak INSERT, z tym, że jeśli w tablicy nazwa_tab istnieje już rekord o takiej samej wartości PRIMARY KEY lub indeksu UNIQUE, to poprzedni rekord jest najpierw usuwany a dopiero wtedy wstawiany nowy. Jest to więc polecenie, które powoduje bardziej bezpośrednie skutki niż polecenie UPDATE. Z tego powodu jest więc i bardziej niebezpieczne i wygodniejsze, bowiem jeśli nie ma danego rekordu w tablicy a chcielibyśmy wykonać UPDATE tego rekordu, to polecenie UPDATE się nie wykona. natomiast polecenie REPLACE wykona się. Czasem jest to pożądane działanie a czasem nie jest. Należy umieć rozróżnić te dwa przypadki i wybrać odpowiednie rozwiązanie (albo UPDATE albo REPLACE). Należy zauważyć, że polecenie REPLACE nie ma sensu, jeśli tablica nie zawiera klucza podstawowego (PRIMARY KEY) lub unikalnego (UNIQUE). Wtedy po prostu polecenie REPLACE jest równoważne poleceniu INSERT, gdyż nie ma indeksu, na podstawie którego można określić czy nowy rekord zastąpi poprzedni. Wartości wszystkich kolumn sa tak jak w przypadku polecenia INSERT podawane w wyrażeniu. Jeśli pominiemy jakieś kolumny, to ich wartości zostaną nadane na podstawie wartości domyślnych zdefiniowanych podczas definiowania struktury tablicy. Aby można było używać polecenia REPLACE musimy mieć prawo do wykonywania poleceń INSERT oraz DELETE dla danej tabeli. Polecenie REPLACE zwraca liczbę zmienionych rekordów (usuniętych starych i wstawionych nowych). Jeśli ta liczba wynosi 1 (dla pojedynczego polecenia REPLACE działającego na jednym rekordzie), to oznacza to, że został wstyawiony jeden nowy rekord do tablicy, ale nie został usunięty żaden stary rekord. Jeśli natomiast ta liczba jest większa niż 1, to oznacza to, ze zostało usuniętych 1 lub więcej nowych rekordów zostało usuniętych zanim zostały wstawione nowe rekordy. Inaczej mówiąc, jeśli REPLACE zwraca 1 to znaczy, że rekord został dodany, natomiast jeśli REPLACE zwróci więcej niż 1, to zostyał zamieniony. Należy zauważyć, że może się zdażyć sytuacja, w której za pomocą jednego polecenia REPLACE, przeznaczonego teoretycznie dla jednego rekordu, zostanie zastąpionych więcej niż jeden starych rekordów. Stanie się tak wówczas, gdy tablica zawiera wielokrotne, unikalne indeksy i nowy rekord duplikuje wartości dla różnych, starych rekordów z różnymi unikalnymi indeksami. Algorytm stosowany przez MySQL podczas wykonywania polecenia REPLACE jest następujący:
Listing
REPLACE
[LOW_PRIORITY | DELAYED]
[INTO] nazwa_tab [(nazwa_kol1,nazwa_kol2...)]
VALUES ({wyr | DEFAULT},...),(...),...
--Listing 2.0
REPLACE
[LOW_PRIORITY | DELAYED]
[INTO] nazwa_tab
SET nazwa_kol={wyr | DEFAULT}, ...
--Listing 3.0
REPLACE
[LOW_PRIORITY | DELAYED]
[INTO] nazwa_tab [(nazwa_kol,...)]
SELECT ...
--Lisitng 4.0
Ranga: Administrator serwisu Punktów: 0
- Zobacz kod dodany do tego wpisu
-
UPDATE tabela_klient SET imie = REPLACE(imie, 'stare imie', 'nowe imie')
-