Loading:

Postanowienia noworoczne - a Ty czego nauczysz się w nowym roku? [-25%]

Dostępne funkcje dla REPLACE - MySQL

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:


  1. Spróbuj wstawić nowy rekord do tablicy.
  2. Jeśli próba wstawienia nowego rekordu nie powiodła się z powodu duplikacji klucza podstawowego lub unikalnego, to:
    1. usuń z tablicy rekord, który powoduje konflikt z powodu takiego samego klucza podstawowego lub unikalnego;
    2. spróbuj ponownie wstawić nowy rekord do tablicy.



Napisz Artykuł

Listing

--Listing 1.0
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


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5149

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 37719
Komentarze użytkowników
przykład użycia:
autor: igor | 5383 | 2010-03-11 22:28:15


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors