MySQL
AKTUALIZACJA
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:
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:
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
.