Zoeken…


Syntaxis

  • UPDATE [LOW_PRIORITY] [IGNORE] tableName SET column1 = expression1, column2 = expression2, ... [WHERE voorwaarden]; // Eenvoudige update van een enkele tabel

  • UPDATE [LOW_PRIORITY] [IGNORE] tabelnaam SET kolom1 = expressie1, kolom2 = expressie2, ... [WAAR voorwaarden] [BESTELLEN OP expressie [ASC | DESC]] [LIMIT row_count]; // Update met volgorde van en limiet

  • UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET column1 = expression1, column2 = expression2, ... [WHERE conditions]; // Update voor meerdere tabellen

Basis update

Een rij bijwerken

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

Deze query werkt de inhoud van email in de customers naar de string [email protected] waarbij de waarde van id gelijk is aan 1. De oude en nieuwe inhoud van de databasetabel worden respectievelijk links en rechts hieronder weergegeven:

voer hier de afbeeldingsbeschrijving in


Alle rijen bijwerken

UPDATE customers SET lastname='smith'

Met deze query wordt de inhoud van de lastname bijgewerkt voor elk item in de customers . De oude en nieuwe inhoud van de databasetabel worden respectievelijk links en rechts hieronder weergegeven:

voer hier de afbeeldingsbeschrijving in

Opmerking: het is noodzakelijk om voorwaardelijke clausules (WHERE) te gebruiken in de UPDATE-query. Als u geen voorwaardelijke clausule gebruikt, worden alle records van het kenmerk van die tabel bijgewerkt. In bovenstaand voorbeeld nieuwe waarde (Smith) van achternaam in klantentabel ingesteld op alle rijen.

Update met Join-patroon

Beschouw een productietafel genoemd questions_mysql en een tafel iwtQuestions (geïmporteerd worktable) die de laatste partij geïmporteerde CSV gegevens van een LOAD DATA INFILE . De werktafel wordt afgekapt vóór de import, de gegevens worden geïmporteerd en dat proces wordt hier niet weergegeven.

Werk onze productiegegevens bij met een join met onze geïmporteerde werktafelgegevens.

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;

Aliassen q en i worden gebruikt om de tabelverwijzingen in te korten. Dit vergemakkelijkt de ontwikkeling en leesbaarheid.

qId , de primaire sleutel, vertegenwoordigt het Stackoverflow-vraag-ID. Vier kolommen worden bijgewerkt voor overeenkomende rijen van de join.

UPDATE met BESTELLEN DOOR en BEPERKEN

Als de clausule ORDER BY is opgegeven in uw SQL-instructie update, worden de rijen bijgewerkt in de opgegeven volgorde.

Als de LIMIT clausule is opgegeven in uw SQL-instructie, stelt dat een limiet aan het aantal rijen dat kan worden bijgewerkt. Er is geen limiet, als de LIMIT clausule niet is opgegeven.

ORDER BY en LIMIT kunnen niet worden gebruikt voor update van meerdere tabellen.

Syntaxis voor de MySQL UPDATE met ORDER BY en LIMIT is,

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

In het bovenstaande voorbeeld worden 10 rijen bijgewerkt op basis van de volgorde van medewerkers die joiningDate .

Meerdere tabellen UPDATE

In UPDATE meerdere tabellen worden rijen in elke opgegeven tabel bijgewerkt die aan de voorwaarden voldoen. Elke overeenkomende rij wordt één keer bijgewerkt, zelfs als deze meerdere keren aan de voorwaarden voldoet.

In meerdere tabellen kunnen UPDATE , ORDER BY en LIMIT niet worden gebruikt.

Syntaxis voor UPDATE met meerdere tabellen is,

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

Overweeg bijvoorbeeld twee tabellen, products en salesOrders . In het geval dat we de hoeveelheid van een bepaald product van de reeds geplaatste verkooporder verlagen. Dan moeten we die hoeveelheid ook verhogen in onze voorraadkolom met products . Dit kan worden gedaan in een enkele SQL-update-instructie zoals hieronder.

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;

In het bovenstaande voorbeeld wordt hoeveelheid '5' gereduceerd uit de tabel met salesOrders en hetzelfde wordt verhoogd in de products volgens de WHERE voorwaarden.

Bulk UPDATE

Bij het bijwerken van meerdere rijen met verschillende waarden is het veel sneller om een bulkupdate te gebruiken.

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);

Door bulkupdates kan slechts één query naar de server worden verzonden in plaats van één query voor elke rij die moet worden bijgewerkt. De cases moeten alle mogelijke parameters bevatten die zijn opgezocht in de WHERE clausule.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow