MySQL
METTRE À JOUR
Recherche…
Syntaxe
UPDATE [LOW_PRIORITY] [IGNORE] nomTable SET column1 = expression1, column2 = expression2, ... [conditions WHERE]; // Mise à jour simple d'une table unique
UPDATE [LOW_PRIORITY] [IGNORE] nomTable SET column1 = expression1, column2 = expression2, ... [conditions WHERE] [expression ORDER BY [ASC | DESC]] [LIMIT row_count]; // Mise à jour avec ordre par et limite
UPDATE [LOW_PRIORITY] [IGNORE] table1, table2, ... SET column1 = expression1, column2 = expression2, ... [conditions WHERE]; // Mise à jour de plusieurs tables
Mise à jour de base
Mise à jour d' une ligne
UPDATE customers SET email='[email protected]' WHERE id=1
Cette requête met à jour le contenu du email
dans la table customers
à la chaîne [email protected]
où la valeur de id
est égale à 1. Les anciens et les nouveaux contenus de la table de base de données sont illustrés ci-dessous respectivement à gauche et à droite:
Mise à jour de toutes les lignes
UPDATE customers SET lastname='smith'
Cette requête met à jour le contenu du lastname
pour chaque entrée de la table customers
. L'ancien et le nouveau contenu de la table de base de données sont illustrés ci-dessous, respectivement à gauche et à droite:
Remarque: il est nécessaire d'utiliser des clauses conditionnelles (WHERE) dans la requête UPDATE. Si vous n'utilisez pas de clause conditionnelle, tous les enregistrements de cet attribut seront mis à jour. Dans l'exemple ci-dessus, la nouvelle valeur (Smith) du nom de famille dans la table clients est définie sur toutes les lignes.
Mise à jour avec le modèle de jointure
Considérons une table de production appelée questions_mysql
et une table iwtQuestions
(table de travail importée) représentant le dernier lot de données CSV importées à partir d'un LOAD DATA INFILE
. La table de travail est tronquée avant l'importation, les données sont importées et ce processus n'est pas affiché ici.
Mettez à jour nos données de production en utilisant une jointure à nos données de table de travail importées.
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;
Les alias q
et i
sont utilisés pour abréger les références de la table. Cela facilite le développement et la lisibilité.
qId
, la clé primaire, représente l'identifiant de la question Stackoverflow. Quatre colonnes sont mises à jour pour faire correspondre les lignes de la jointure.
MISE À JOUR avec ORDER BY et LIMIT
Si la clause ORDER BY
est spécifiée dans votre instruction SQL update, les lignes sont mises à jour dans l'ordre spécifié.
Si la clause LIMIT
est spécifiée dans votre instruction SQL, cela limite le nombre de lignes pouvant être mises à jour. Il n'y a pas de limite, si la clause LIMIT
n'est pas spécifiée.
ORDER BY
et LIMIT
ne peuvent pas être utilisés pour la mise à jour multi-tables.
Syntaxe pour MySQL UPDATE
avec ORDER BY
et LIMIT
est,
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
Dans l'exemple ci-dessus, 10 lignes seront mises à jour en fonction de l'ordre des employés joiningDate
.
MISE À JOUR de table multiple
Dans UPDATE
tables multiples, il met à jour les lignes de chaque table spécifiée qui satisfont aux conditions. Chaque ligne correspondante est mise à jour une fois, même si elle correspond aux conditions plusieurs fois.
Dans les tables multiples UPDATE
, ORDER BY
et LIMIT
ne peuvent pas être utilisés.
La syntaxe pour la table multi UPDATE
est,
UPDATE [LOW_PRIORITY] [IGNORE]
table1, table2, ...
SET column1 = expression1,
column2 = expression2,
...
[WHERE conditions]
Prenons par exemple deux tables, products
et salesOrders
. Dans le cas où nous réduisons la quantité d'un produit particulier de la commande client qui est déjà passée. Ensuite, nous devons également augmenter cette quantité dans notre colonne de stock de products
. Cela peut être fait dans une seule déclaration de mise à jour SQL comme ci-dessous.
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;
Dans l'exemple ci-dessus, la quantité '5' sera réduite à partir de la table salesOrders
et la même chose sera augmentée dans la table des products
fonction des conditions WHERE
.
MISE À JOUR en vrac
Lors de la mise à jour de plusieurs lignes avec des valeurs différentes, il est beaucoup plus rapide d'utiliser une mise à jour groupée.
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);
En mettant à jour en bloc, une seule requête peut être envoyée au serveur au lieu d'une requête pour chaque ligne à mettre à jour. Les cas doivent contenir tous les paramètres possibles recherchés dans la clause WHERE
.