Szukaj…


Składnia

  • UPDATE [LOW_PRIORITY] [IGNORE] tableName SET kolumna1 = wyrażenie1, kolumna2 = wyrażenie2, ... [GDZIE warunki]; // Prosta aktualizacja pojedynczej tabeli

  • AKTUALIZACJA [LOW_PRIORITY] [IGNORE] nazwa tabeli SET kolumna1 = wyrażenie1, kolumna2 = wyrażenie2, ... [GDZIE warunki] [ZAMÓWIENIE PO wyrażeniu [ASC | DESC]] [LIMIT liczba_wierszy]; // Aktualizacja z zamówieniem i limitem

  • UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET kolumna1 = wyrażenie1, kolumna2 = wyrażenie2, ... [GDZIE warunki]; // Aktualizacja wielu tabel

Podstawowa aktualizacja

Aktualizowanie jednego wiersza

UPDATE customers SET email='[email protected]' WHERE id=1

To zapytanie aktualizuje treść email w tabeli customers do ciągu [email protected] gdzie wartość id jest równa 1. Stara i nowa zawartość tabeli bazy danych są przedstawione odpowiednio po lewej i prawej stronie:

wprowadź opis zdjęcia tutaj


Aktualizowanie wszystkich wierszy

UPDATE customers SET lastname='smith'

To zapytanie aktualizuje zawartość lastname dla każdego wpisu w tabeli customers . Stara i nowa zawartość tabeli bazy danych są przedstawione odpowiednio po lewej i prawej stronie:

wprowadź opis zdjęcia tutaj

Uwaga: Konieczne jest użycie klauzul warunkowych (GDZIE) w zapytaniu UPDATE. Jeśli nie użyjesz żadnej klauzuli warunkowej, wszystkie rekordy atrybutu tej tabeli zostaną zaktualizowane. W powyższym przykładzie nowa wartość (Smith) nazwiska w tabeli klientów ustawiona na wszystkie wiersze.

Zaktualizuj za pomocą Połącz wzór

Rozważmy stołowego produkcja nazwie questions_mysql i stół iwtQuestions (importowany stół) reprezentujących ostatnią partię importowanych danych CSV z pomocą LOAD DATA INFILE . Stół roboczy jest obcinany przed importem, dane są importowane, a proces ten nie jest tutaj pokazywany.

Zaktualizuj nasze dane produkcyjne, używając sprzężenia z naszymi importowanymi danymi stołu roboczego.

UPDATE questions_mysql q -- our real table for production 
join iwtQuestions i -- imported worktable 
ON i.qId = q.qId
SET q.closeVotes = i.closeVotes,
q.votes = i.votes, 
q.answers = i.answers, 
q.views = i.views;

Aliasy q i są używane do skracania odwołań do tabeli. Ułatwia to rozwój i czytelność.

qId , klucz podstawowy, reprezentuje identyfikator pytania qId . Zaktualizowano cztery kolumny w celu dopasowania wierszy z połączenia.

AKTUALIZACJA z ORDER BY i LIMIT

Jeśli w instrukcji SQL aktualizacji podano klauzulę ORDER BY , wiersze są aktualizowane w określonej kolejności.

Jeśli w instrukcji SQL podano klauzulę LIMIT , ogranicza to liczbę wierszy, które można zaktualizować. Nie ma limitu, jeśli nie określono klauzuli LIMIT .

ORDER BY i LIMIT nie mogą być używane do aktualizacji wielu tabel.

Składnia UPDATE MySQL z ORDER BY i LIMIT to:

UPDATE [ LOW_PRIORITY ] [ IGNORE ]
tableName
SET column1 = expression1,
    column2 = expression2,
    ...
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT row_count];

---> Example
UPDATE employees SET isConfirmed=1 ORDER BY joiningDate LIMIT 10

W powyższym przykładzie 10 wierszy zostanie zaktualizowanych zgodnie z kolejnością pracowników joiningDate .

AKTUALIZACJA Wiele tabel

W UPDATE wielu tabel aktualizuje wiersze w każdej określonej tabeli, która spełnia warunki. Każdy pasujący wiersz jest aktualizowany jeden raz, nawet jeśli wielokrotnie spełnia warunki.

W wielu tabelach UPDATE , ORDER BY i LIMIT nie mogą być używane.

Składnia UPDATE dla wielu tabel to:

UPDATE [LOW_PRIORITY] [IGNORE] 
table1, table2, ...
    SET column1 = expression1,
        column2 = expression2,
        ...
    [WHERE conditions]

Weźmy na przykład dwie tabele, products i salesOrders . W przypadku zmniejszamy ilość konkretnego produktu ze złożonego już zamówienia sprzedaży. Następnie musimy również zwiększyć tę ilość w tabeli zapasów w kolumnie products . Można to zrobić za pomocą pojedynczej instrukcji aktualizacji SQL, jak poniżej.

UPDATE products, salesOrders
  SET salesOrders.Quantity = salesOrders.Quantity - 5, 
      products.availableStock = products.availableStock + 5
WHERE products.productId = salesOrders.productId
  AND salesOrders.orderId = 100 AND salesOrders.productId = 20;

W powyższym przykładzie ilość „5” zostanie zmniejszona z tabeli salesOrders a to samo zostanie zwiększone w tabeli products zgodnie z warunkami WHERE .

Zbiorcza aktualizacja

Podczas aktualizowania wielu wierszy o różnych wartościach znacznie szybciej jest użyć aktualizacji zbiorczej.

UPDATE people 
SET name = 
  (CASE id WHEN 1 THEN 'Karl'
           WHEN 2 THEN 'Tom'
           WHEN 3 THEN 'Mary'
   END)
WHERE id IN (1,2,3);

Dzięki aktualizacji zbiorczej na serwer można wysłać tylko jedno zapytanie zamiast jednego zapytania dla każdego wiersza do aktualizacji. Sprawy powinny zawierać wszystkie możliwe parametry sprawdzone w klauzuli WHERE .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow