Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Aktualizuj dane w bazie danych MySQL

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:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP — Używanie PDO z tablicą klauzul IN

  2. Jak zaktualizować, jeśli istnieje, wstawić, jeśli nie (AKA upsert lub merge) w MySQL?

  3. Jaka jest kolejność wierszy MySQL dla SELECT * FROM nazwa_tabeli;?

  4. Stosowanie PDO na zajęciach

  5. Funkcja MySQL LOG2() – Zwróć logarytm Base-2 wartości