MySQL
AKTUALISIEREN
Suche…
Syntax
UPDATE [LOW_PRIORITY] [IGNORE] Tabellenname SET Spalte1 = Ausdruck1, Spalte2 = Ausdruck2, ... [WHERE-Bedingungen]; // Einfaches Update einer einzelnen Tabelle
UPDATE [LOW_PRIORITY] [IGNORE] tableName SET Spalte1 = Ausdruck1, Spalte2 = Ausdruck2, ... [WHERE-Bedingungen] [ORDER BY-Ausdruck [ASC | DESC]] [LIMIT row_count]; // Mit order by und limit aktualisieren
UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET Spalte1 = Ausdruck1, Spalte2 = Ausdruck2, ... [WHERE-Bedingungen]; // Aktualisierung mehrerer Tabellen
Grundlegendes Update
Eine Zeile aktualisieren
UPDATE customers SET email='[email protected]' WHERE id=1
Diese Abfrage aktualisiert den Inhalt der email
- customers
[email protected]
id
email
in der customers
- Tabelle auf den String [email protected]
, wo der Wert von id
1. Die alten und neuen Inhalte der Datenbanktabelle gleich sind unten auf der linken Seite dargestellt bzw. rechts:
Alle Zeilen werden aktualisiert
UPDATE customers SET lastname='smith'
Diese Abfrage aktualisiert den Inhalt des lastname
für jeden Eintrag in der customers
- Tabelle. Der alte und der neue Inhalt der Datenbanktabelle sind links bzw. rechts unten dargestellt:
Hinweis: In der UPDATE-Abfrage müssen bedingte Klauseln (WHERE) verwendet werden. Wenn Sie keine Bedingungsklausel verwenden, werden alle Datensätze des Attributs dieser Tabelle aktualisiert. In obigem Beispiel neuer Wert (Smith) von Nachname in Kundentabelle auf alle Zeilen gesetzt.
Aktualisieren Sie mit Join Pattern
Betrachten Sie eine Produktionstabelle namens questions_mysql
und eine Tabelle iwtQuestions
(importierte Arbeitstabelle), die den letzten Stapel importierter CSV-Daten aus einer LOAD DATA INFILE
. Die Arbeitstabelle wird vor dem Import abgeschnitten, die Daten werden importiert und dieser Vorgang wird hier nicht angezeigt.
Aktualisieren Sie unsere Produktionsdaten mithilfe einer Verknüpfung mit unseren importierten Arbeitstischdaten.
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;
Die Aliase q
und i
werden verwendet, um die Tabellenverweise abzukürzen. Dies erleichtert die Entwicklung und Lesbarkeit.
qId
, der Primärschlüssel, repräsentiert die Stackoverflow-Fragen-ID. Es werden vier Spalten aktualisiert, um passende Zeilen aus dem Join zu finden.
UPDATE mit ORDER BY und LIMIT
Wenn die ORDER BY
Klausel in Ihrer Update-SQL-Anweisung angegeben ist, werden die Zeilen in der angegebenen Reihenfolge aktualisiert.
Wenn in Ihrer SQL-Anweisung eine LIMIT
Klausel angegeben ist, wird dadurch die Anzahl der Zeilen, die aktualisiert werden können, begrenzt. Es gibt keine Begrenzung, wenn keine LIMIT
Klausel angegeben ist.
ORDER BY
und LIMIT
können nicht für die Aktualisierung LIMIT
Tabellen verwendet werden.
Die Syntax für das MySQL- UPDATE
mit ORDER BY
und LIMIT
lautet
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
Im obigen Beispiel werden 10 Zeilen entsprechend der Reihenfolge der Mitarbeiter aktualisiert, die am joiningDate
.
Mehrere Tabelle UPDATE
In UPDATE
mehrere Tabellen werden Zeilen in jeder angegebenen Tabelle aktualisiert, die die Bedingungen erfüllen. Jede übereinstimmende Zeile wird einmal aktualisiert, auch wenn sie mehrmals den Bedingungen entspricht.
In mehreren Tabellen- UPDATE
können ORDER BY
und LIMIT
nicht verwendet werden.
Syntax für Multi Table UPDATE
ist,
UPDATE [LOW_PRIORITY] [IGNORE]
table1, table2, ...
SET column1 = expression1,
column2 = expression2,
...
[WHERE conditions]
Betrachten Sie zum Beispiel zwei Tabellen, products
und salesOrders
. In dem Fall reduzieren wir die Menge eines bestimmten Produkts aus dem bereits erteilten Kundenauftrag. Dann müssen wir diese Menge auch in unserer products
erhöhen. Dies kann in einer einzelnen SQL-Aktualisierungsanweisung wie folgt durchgeführt werden.
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;
Im obigen Beispiel wird die Menge '5' aus der salesOrders
Tabelle reduziert und in der products
entsprechend den WHERE
Bedingungen erhöht.
Bulk-Update
Bei der Aktualisierung mehrerer Zeilen mit unterschiedlichen Werten ist die Massenaktualisierung viel schneller.
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);
Bei Massenaktualisierungen kann nur eine Abfrage an den Server gesendet werden, anstatt eine Abfrage für jede zu aktualisierende Zeile. Die Fälle sollten alle möglichen Parameter enthalten, die in der WHERE
Klausel nachgeschlagen werden.