Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]insert into / update w jednym ?
Forum PHP.pl > Forum > Przedszkole
peter13135
Mam taki "problem", że muszę dodać rekord do bazy, lub zaktualizować jeśli taki już istnieje.
Najpierw muszę zrobić zapytanie typu SELECT sprawdzającego czy rekord istnieje. Jeśli rekord istnieje, to mam dodać nowy, jeśli nie to zaktualizować.
A czy da się to jakoś zrobić w jednym zapytaniu ?
Jeśli tak, to proszę o przykład.
lukasz_os
Nie zrobisz tego w jednym zapytaniu smile.gif
lobopol
lukasz_os no cóż mylisz się, metod jest kilka np.
  1. REPLACE INTO `table`
  2. SET `id` = '111',
  3. `costam` = 111;

albo http://dev.mysql.com/doc/refman/5.1/en/ins...-duplicate.html
Można również zrobić bardziej złożone zapytania z ifami sprawdzające czy jest dany wpis czy nie, ale to jest więcej zabawy
pmir13
Zdecydowanie polecam składnię INSERT ... ON DUPLICATE KEY UPDATE ...
W przypadku REPLACE mamy do czynienia z usunięciem rekordu a następnie wstawieniem nowego, co powoduje niepotrzebne obciążenie, a także między innymi fragmentację indeksów.
Przykład:
  1. INSERT INTO odwiedziny(user_id,ile) VALUES(15,1)
  2. ON DUPLICATE KEY UPDATE ile=ile+1;

Składnia ta wymaga by kolumna lub kolumny które mają decydować o tym, czy dany rekord jest już w bazie, miały ustawiony unikalny klucz (PRIMARY lub UNIQUE).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.