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:

Geben Sie hier die Bildbeschreibung ein


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:

Geben Sie hier die Bildbeschreibung ein

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow