Loading:

Ferie zimowe - 3 za 2

Dostępne funkcje dla UPDATE - MySQL

Składnia polecenia UPDATE zależy od tego, w ilu tablicach dokonujemy zmiany danych. I tak:

w przypadku jednej tablicy: (patrz Listing 1.0),

 

a w przypadku wielu tablic:(patrz Listing 2.0)

 

 

Za pomocą polecenia UPDATE możemy zmienić zawartość kolumn w istniejących wierszach tablicy. Słowo SET wskazuje, które kolumny będziemy zmieniać oraz co będzie ich nową zawartością. Jeśli w poleceniu UPDATE wpiszemy słowo WHERE to możemy określić, w których wierszach dokonamy zmian, przy czym obowiązują tutaj zwyczajne zasady wyboru odpowiednich wierszy, tak jak w innych poleceniach SQL, a w szczególności w przypadku polecenia SELECT. Jeśli nie podamy opcji WHERE, wtedy zostaną zmienione wszystkie wiersze (uwaga! niebezpieczne). Podobnie działa opcja LIMIT; ogranicza liczbę wierszy, które ulegną zmianie podczas wykonywania polecenia UPDATE.

 

 

  • W przypadku słowa UPDATE możemy używać następujących dwóch parametrów:

  •  

    1. parametr LOW_PRIORITY powoduje opóźnienie wykonania polecenia UPDATE do momentu zakończenia wykonywania przez bazę wszystkich innych poleceń pobierania danych z danej tablicy.
    2. parametr IGNORE powoduje nieprzerywanie polecenia UPDATE w przypadku, kiedy wystąpią błędy podczas zmiany wartości kolumn (tzw. błędy duplikatu klucza). W takim wypadku wiersze, dla których występują konflikty, nie są zmieniane.
  • Polecenie UPDATE zapamiętuje bierzącą (przed zmianą) wartość danej kolumny. Na przykład, jeśli chcemy zwiększyć wartość kolumny o 2 to możemy wykonać następujące polecenie:(patrz Listing 3.0)

  • Przypisania (po słowie SET są wykonywane w poleceniu UPDATE od lewej do prawej. W przykłaszie poniżej najpierw następuje pomnożenie wartości kolumny przez 2, a dopiero później zwiększenie wartości kolumny o 1:(patrz Listing 4.0)

  • Jeśli próbujemy nadać kolumnie nową wartość, która jest taka sama jak poprzednia, to MySQL zasygnalizuje ten fakt.

  • Jeśli zmieniamy kolumny, które przy definicji tablicy były zadeklarowane jako NOT NULL wstawiając wartość NULL, wtedy MySQL wstawia do takiej kolumny wartość domyślną i wypisuje ostrzeżenie. Wartościami domyślnymi są (chyba, że przy definicji struktury tablicy zaznaczono inaczej): 0 dla kolumn typu numerycznego, pusty string '' dla kolumn typu znakowego, oraz wartość ``zero'' dla kolumn typu data i czas.

  • Polecenie UPDATE zwraca liczbę wmienionych rekordów (wierszy).

  • Zaczynając od wersji 3.23 MySQLa możemy używać opcji LIMIT liczba_wierszy w celu ograniczenia liczby wierszy, które zmienimy poleceniem UPDATE. Opcja LIMIT liczba_wierszy działa następująco:

    1. Przed wersją 4.0.13 MySQLa polecenie UPDATE zatrzymuje się w momencie kiedy zostanie zmienionych liczba_wierszy wierszy, które spełniały warunki wymienione po opcji WHERE.
    2. Od wersji 4.0.13 MySQLa polecenie UPDATE zatrzymuje się w momencie kiedy zostanie znalezionych liczba_wierszy wierszy, które spełniały warunki wymienione po opcji WHERE, bez względu na to, czy zostały one zmienione czy też nie zostały zmienione.
  • Jeśli użyjemy opcji ORDER BY wtedy wiersze będą zmieniane w kolejności takiej jak podano w to w tej opcji.

  • Od wersji 4.04 MySQLa za pomocą jednego polecenia UPDATE możemy zmieniać dane w kilku tablicach:(patrz Listing 5.0)

  •  

    Uwaga. Przy poleceniu UPDATE działającym na kilku tablicach, nie możemy używać opcji ORDER BY i LIMIT.

  • Aby wykonać zmiany w tablicy musimy mieć odpowiednie przywileje do dokonywania takich zmian.

  • Kiedy chcemy zmienić dane w kilku tablicach typu InnoDB, dla których zdefiniowane są klucze klucze obce, wtedy najprawdopodobniej MySQL wykona UPDATE w innej kolejności niż wynikałoby to z relacji rodzic/dziecko. W takim wypadku najprawdopodobniej polecenie UPDATE się nie powiedzie i dane nie zostaną zmienione. W takich wypadkach lepiej jest zmienić dane w jednej tablicy i polegać na możliwościach tablic typu InnoDB, dzięki którym tablice z kluczami obcymi zostaną zmienione w sposób odpowiedni.



Napisz Artykuł

Listing

--Listing 1.0
UPDATE
  [LOW_PRIORITY] [IGNORE] nazwa_tab
  SET nazwa_kol1=wyr1 [, nazwa_kol2=wyr2 ...]
  [WHERE definicja_where]
  [ORDER BY ...]
  [LIMIT liczba_wierszy]

--Listing 2.0
UPDATE
  [LOW_PRIORITY] [IGNORE] nazwa_tab1 [, nazwa_tab2 ...]
  SET nazwa_kol1=wyr1 [, nazwa_kol2=wyr2 ...]
  [WHERE definicja_where]

--Listing 3.0
UPDATE dane_personalne SET wiek=wiek+1;

--Listing 4.0
UPDATE dane_personalne SET wiek=wiek*2, wiek=wiek+1;

--Listing 5.0
UPDATE jednostki, miesiace SET jednostki.cena=miesiace.cena WHERE jednostki.id=miesiace.id;


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=5137

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



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38319
Komentarze użytkowników
dzieki pomoglo mi bardzo :D
autor: kosa281 | 5595 | 2010-04-08 16:50:07


    • 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