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:

entrer la description de l'image ici


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:

entrer la description de l'image ici

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 .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow