Co jest nie tak z tym zapytaniem:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Działa bez WHERE
klauzuli. Wyglądało na to, że zapomniałem swojego kodu SQL
Składnia MySQL INSERT nie obsługuje klauzuli WHERE, więc zapytanie w obecnej postaci zakończy się niepowodzeniem. Zakładając, że Twoja id
kolumna jest unikatowa lub kluczem podstawowym:
Jeśli próbujesz wstawić nowy wiersz o identyfikatorze 1, powinieneś użyć:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Jeśli próbujesz zmienić wagę / pożądane wartości wagi dla istniejącego wiersza o identyfikatorze 1, powinieneś użyć:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Jeśli chcesz, możesz też użyć WSTAWIĆ .. W składni DUPLICATE KEY w następujący sposób:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
LUB nawet tak:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
Ważne jest również, aby pamiętać, że jeśli twoja id
kolumna jest kolumną z autoinkrementacją, równie dobrze możesz pominąć ją w INSERT i pozwolić mysql inkrementować ją jak zwykle.
If you're trying to insert a new row with ID 1 you should be using
INSERT INTO. W twoim przypadku próbujesz wstawić, gdy ID 1 już istnieje i jest to klucz podstawowy lub unikalny i kończy się niepowodzeniem, więc powinieneś użyć składni UPDATE lub INSERT .. W składni DUPLICATE KEYNie można łączyć klauzuli WHERE z klauzulą VALUES. O ile wiem, masz dwie opcje:
INSERT określając wartości
INSERT przy użyciu instrukcji SELECT
źródło
Klauzula WHERE jest używana do zapytań UPDATE. Kiedy WSTAWISZ, zakładasz, że wiersz nie istnieje.
Oświadczenie PO stałoby się wtedy;
W MySQL, jeśli chcesz INSERT lub UPDATE, możesz użyć zapytania REPLACE z klauzulą WHERE. Jeśli GDZIE nie istnieje, WSTAWIA, w przeciwnym razie AKTUALIZUJE.EDYTOWAĆ
Myślę, że punkt widzenia Billa Karwina jest na tyle ważny, że można go wyrwać z komentarzy i uczynić go bardzo oczywistym. Dzięki Bill, minęło zbyt dużo czasu odkąd pracowałem z MySQL, przypomniałem sobie, że miałem problemy z REPLACE, ale zapomniałem, czym one są. Powinienem to sprawdzić.
Nie tak działa REPLACE MySQL. Wykonuje DELETE (co może oznaczać brak operacji, jeśli wiersz nie istnieje), po którym następuje INSERT. Pomyśl o konsekwencjach vis. wyzwalacze i zależności kluczy obcych. Zamiast tego użyj INSERT ... ON DUPLICATE KEY UPDATE.
źródło
Nie sądzę, aby wstawka zawierała klauzulę WHERE.
źródło
Wstaw zapytanie nie obsługuje, gdzie słowo kluczowe *
Obowiązują warunki, ponieważ możesz użyć warunku where dla instrukcji wyboru podrzędnego. Możesz wykonywać skomplikowane wstawki za pomocą sub-selekcji.
Na przykład:
Umieszczając opcję „wybierz” w instrukcji wstawiania, można szybko wykonać wielokrotne wstawianie.
W przypadku tego typu wstawiania możesz chcieć sprawdzić liczbę wstawianych wierszy. Możesz określić liczbę wierszy, które zostaną wstawione, uruchamiając następującą instrukcję SQL przed wykonaniem wstawiania.
Możesz upewnić się, że nie wstawiasz zduplikowanych informacji, używając warunku EXISTS.
Na przykład, jeśli masz tabelę o nazwie klientów z kluczem podstawowym client_id, możesz użyć następującej instrukcji:
Ta instrukcja wstawia wiele rekordów z podselekcją.
Jeśli chcesz wstawić pojedynczy rekord, możesz użyć następującej instrukcji:
Użycie tabeli podwójnej umożliwia wprowadzenie wartości w instrukcji select, nawet jeśli wartości nie są obecnie przechowywane w tabeli.
Zobacz także Jak wstawiać z klauzulą where
źródło
Prawidłowa odpowiedź na to pytanie będzie wyglądać następująco:
za). JEŚLI chcesz wybrać przed wstawieniem:
b). JEŚLI rekord już istnieje, użyj aktualizacji zamiast wstawiania:
Powinien być
do). Jeśli chcesz zaktualizować lub wstawić w tym samym czasie
re). Jeśli chcesz SKLONOWAĆ rekord z TEJ SAMEJ tabeli, pamiętaj tylko, że nie możesz wybrać z tabeli, do której wstawiasz
Myślę, że to całkiem pokrywa większość scenariuszy
źródło
Po prostu nie możesz użyć WHERE podczas wykonywania instrukcji INSERT:
Powinien być:
Część WHERE działa tylko w instrukcjach SELECT:
lub w instrukcjach UPDATE:
źródło
Insert into = Dodawanie wierszy do tabeli
Upate = aktualizuj określone wiersze.
Co opisałaby klauzula Where w Twojej wstawce? Nie ma nic do dopasowania, wiersz nie istnieje (jeszcze) ...
źródło
Możesz wykonać warunkowe INSERT na podstawie danych wprowadzonych przez użytkownika. To zapytanie wstawi tylko wtedy, gdy zmienne wejściowe '$ userWeight' i '$ userDesiredWeight' nie są puste
źródło
Zależy to od sytuacji, w której INSERT może faktycznie mieć klauzulę where.
Na przykład, jeśli dopasowujesz wartości z formularza.
To ma sens, prawda?
źródło
Najprostszym sposobem jest użycie funkcji JEŻELI w celu naruszenia kluczowego ograniczenia. Działa to tylko dla INSERT IGNORE, ale pozwoli ci użyć ograniczenia w INSERT.
źródło
Po
WHERE
Klauzula umieszcza warunek, który jest używany do pobierania danych lub do aktualizowania wiersza. Podczas wstawiania danych zakłada się, że wiersz nie istnieje.A więc pytanie brzmi, czy istnieje wiersz o identyfikatorze 1? jeśli tak, użyj MySQL UPDATE , w przeciwnym razie użyj MySQL INSERT .
źródło
Jeśli określasz konkretny rekord nie do wstawiania danych, lepiej jest użyć
UPDATE
instrukcji zamiastINSERT
instrukcji.Ten typ zapytania, które wpisałeś w pytaniu, jest jak zapytanie fikcyjne.
Twoje zapytanie to: -
Tutaj
UPDATE
określasz id = 1, więc lepiej użyj instrukcji do aktualizacji istniejącego rekordu.Nie zaleca się używaniaWHERE
klauzuli w przypadkuINSERT
.UPDATE
.Teraz korzystam z zapytania aktualizacyjnego: -
źródło
Odpowiedź brzmi: zdecydowanie nie.
Dodanie klauzuli WHERE po INSERT INTO ... VALUES ... jest po prostu nieprawidłowym kodem SQL i nie zostanie przeanalizowane.
Błąd zwracany przez MySQL to:
Najważniejszą częścią komunikatu o błędzie jest
która pokazuje konkretną część, której parser nie spodziewał się znaleźć w tym miejscu: klauzula WHERE.
źródło
jego totalnie źle. INSERT QUERY nie ma klauzuli WHERE, ma ją tylko UPDATE QUERY. Jeśli chcesz dodać dane, gdzie id = 1, wtedy Twoje zapytanie będzie
źródło
Nie. O ile wiem, nie możesz dodać klauzuli WHERE do tego zapytania. Może zapomniałem też o swoim SQL-u, ponieważ nie jestem pewien, dlaczego go potrzebujesz.
źródło
Nie należy używać warunku gdzie w instrukcji Wstaw. Jeśli chcesz, użyj wstawiania w instrukcji aktualizacji, a następnie zaktualizuj istniejący rekord.
Właściwie mogę wiedzieć, dlaczego potrzebujesz klauzuli gdzie w instrukcji wstawiania?
Może w oparciu o powód, mogę zasugerować lepszą opcję.
źródło
Myślę, że najlepszą opcją jest użycie REPLACE zamiast INSERT
źródło
PRZECZYTAJ TO TAKŻE
To nie ma sensu ... nawet dosłownie
INSERT
oznacza dodanie a,new row
a kiedy mówiszWHERE
, definiujesz, o którym wierszu mówisz wSQL
.Dlatego dodanie nowego wiersza nie jest możliwe, jeśli warunek dotyczy istniejącego wiersza.
Masz do wyboru:
A. Użyj
UPDATE
zamiastINSERT
B. Użyj
INSERT
i usuńWHERE
klauzulę (właśnie to mówię ...) lub jeśli jesteś naprawdę zobowiązany do użyciaINSERT
iwWHERE
pojedynczym oświadczeniu można to zrobić tylko za pomocą klauzuli INSERT..SELECT ...Ale służy to zupełnie innemu celowi i jeśli zdefiniowałeś id jako klucz podstawowy, to wstawienie zakończy się niepowodzeniem, w przeciwnym razie zostanie wstawiony nowy wiersz z id = 1.
źródło
Zdaję sobie sprawę, że to stary post, ale mam nadzieję, że to jeszcze komuś pomoże, mam nadzieję, że jest to prosty przykład:
tło:
Miałem wiele do wielu przypadków: ten sam użytkownik jest wymieniony wiele razy z wieloma wartościami i chciałem utworzyć nowy rekord, dlatego UPDATE nie miałoby sensu w moim przypadku i musiałem zwrócić się do konkretnego użytkownika, tak jakbym zrobił używając klauzuli WHERE.
Używając tej konstrukcji, w rzeczywistości kierujesz się na konkretnego użytkownika (user123, który ma inne rekordy), więc tak naprawdę nie potrzebujesz klauzuli where, tak sądzę.
wynikiem może być:
źródło
Sposób użycia INSERT i WHERE is
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
W tym przypadku jest to test istnienia. Nie ma wyjątku, jeśli uruchomisz go dwa lub więcej razy ...źródło
poprawna składnia wstawiania mysql do instrukcji przy użyciu metody post to:
źródło
Nie sądzę, abyśmy mogli użyć klauzuli where w instrukcji wstawiania
źródło
źródło
Nie możesz używać razem INSERT i WHERE. Możesz użyć klauzuli UPDATE, aby dodać wartość do określonej kolumny w określonym polu, jak poniżej;
źródło
Myślę, że prawidłową formą wstawiania wartości w określonym wierszu jest:
działa i jest podobnie, jeśli piszesz na serwerze Microsoft SQL Server
na mysql musisz zaktualizować tabelę.
źródło
Możesz to zrobić za pomocą poniższego kodu:
źródło