Ta strona wyjaśnia, jak zaktualizować istniejące dane w bazie danych MySQL.
Więc dodaliśmy już dane do naszej bazy danych. Ale teraz zdajemy sobie sprawę, że nasze dane zawierają błąd. Jabłkom przypisano
UnitId
z 1
— ale powinno to być 2
.
Możesz to zobaczyć tutaj:
Nie ma problemu. Po prostu zaktualizujemy ten rekord.
UPDATE
Oświadczenie
SQL UPDATE
oświadczenie pozwala nam aktualizować dane w naszej bazie danych. Możemy użyć tej instrukcji, aby zmienić identyfikator jednostki z 1
do 2
. Aby to zrobić, używamy WHERE
klauzula określająca dokładny rekord, który musimy zaktualizować. Tak:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
Generalnie jest to wskazane podczas wykonywania UPDATE
operacji, aby określić pole identyfikatora rekordu, który próbujesz zaktualizować (lub jakikolwiek jest jego klucz podstawowy). Pomaga to zabezpieczyć się przed przypadkową aktualizacją niewłaściwych rekordów. W tym przykładzie wiedzieliśmy, że jabłka mają FruitId
z 1
. Ale możesz nie zawsze znać identyfikator rekordu, który próbujesz zaktualizować. W takim przypadku możesz zrobić coś takiego:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Możemy śledzić każdy z nich za pomocą SELECT
oświadczenie i oto wynik:
Pamiętaj, że DateUpdated kolumna również została zaktualizowana, mimo że nie określiliśmy aktualizacji dla tej kolumny. Dzieje się tak, ponieważ podczas tworzenia tabeli ustawiliśmy tę kolumnę tak, aby była aktualizowana bieżącą datą/godziną za każdym razem, gdy nastąpiła aktualizacja rekordu.
Oto kod, którego użyliśmy podczas tworzenia tej kolumny:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Dokładniej, jest to ON UPDATE CURRENT_TIMESTAMP
co spowodowało, że kolumna została zaktualizowana właśnie teraz, gdy uruchomiliśmy UPDATE
oświadczenie.
Bezpieczne aktualizacje
Równie dobrze moglibyśmy skonstruować naszą UPDATE
polecenie takie jak to (bez AND UnitId = 1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Jeśli jednak spróbujesz to zrobić, możesz napotkać następujący błąd:
Tryb bezpiecznych aktualizacji
Jeśli napotkasz powyższy błąd, to dlatego, że Twoje połączenie MySQL działa w trybie bezpiecznych aktualizacji. Pomaga to zapobiec przypadkowemu nadpisaniu dużej ilości danych. W rzeczywistości, gdybyśmy zapomnieli dołączyć WHERE
klauzula, którą zaktualizowalibyśmy każdy rekord w tabeli!
Tak, uruchomienie poniższego kodu spowoduje, że każdy rekord w naszej tabeli zostanie zaktualizowany do Banana :
UPDATE Fruit SET FruitName = 'Banana'
Zatem uruchomienie w trybie Bezpiecznych aktualizacji jest prawdziwą korzyścią.
Jeśli jednak naprawdę potrzebujesz wykonać to zapytanie (lub jeśli wszystkie twoje owoce naprawdę zamieniły się w banany), możesz wykonać jedną z następujących czynności:
- Zmodyfikuj zapytanie, aby zawierało
KEY
kolumna. Zrobiliśmy to w przykładach u góry tej strony. - Wyłącz tryb bezpiecznych aktualizacji.
Wyłącz tryb bezpiecznych aktualizacji
Jeśli okaże się, że musisz wykonać UPDATE
operacja bez użycia KEY
pole, zawsze możesz wyłączyć tryb Bezpiecznych aktualizacji.
Aby wyłączyć tryb Bezpiecznych aktualizacji, uruchom następujące polecenie przed uruchomieniem UPDATE
oświadczenie:
set sql_safe_updates = 0;
Po zakończeniu zawsze dobrze jest przywrócić ustawienie do poprzedniego stanu — zwłaszcza w przypadku ustawień, które mogą mieć tak szeroki wpływ jak ten.
Aby włączyć tryb Bezpiecznych aktualizacji, uruchom następujące polecenie:
set sql_safe_updates = 1;
W rzeczywistości możesz uruchomić wszystko w tym samym czasie, tak jak poniżej:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Aktualizuj wiele pól
Możesz zaktualizować wiele pól, używając przecinka do oddzielenia każdego przypisania do pola. Tak:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Wynik: