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