Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]insert into / update w jednym ?
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
lukasz_os
post
Post #2





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Nie zrobisz tego w jednym zapytaniu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lobopol
post
Post #3





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
pmir13
post
Post #4





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 07:43