| 14.1 Manipulation de données : SELECT , INSERT , UPDATE , DELETE
 14 Syntaxe des commandes SQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Syntaxe de DELETE
 . Syntaxe de DO
 . Syntaxe de HANDLER
 . Syntaxe de INSERT
 . Syntaxe de LOAD DATA INFILE
 . Syntaxe de REPLACE
 . Syntaxe de SELECT
 . Sous-sélections ( SubSELECT )
 . Syntaxe de TRUNCATE
 ->Syntaxe de UPDATE
 
 
 | 
  14.1.10 Syntaxe de UPDATE  
 Syntaxe multi-tables :| 
UPDATE [LOW_PRIORITY] [IGNORE] tbl_nameSET col_name1=expr1 [, col_name2=expr2 ...]
 [WHERE where_definition]
 [ORDER BY ...]
 [LIMIT row_count]
 | 
 UPDATE
  met à jour des enregistrements dans une tables avec de nouvelles valeurs.
La clause  
SET
  indique les colonnes à modifier et les valeurs à leur donner.
La clause  
WHERE
 , si fournie, spécifie les enregistrements à mettre à jour.
Sinon, tous les enregistrements sont mis à jour.
Si la clause  
ORDER BY
  est fournie, les enregistrements seront mis à jour 
dans l'ordre spécifié.| 
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]SET col_name1=expr1 [, col_name2=expr2 ...]
 [WHERE where_definition]
 | 
 
La commande  
UPDATE
  accepte les options suivantes :
 
Si vous spécifiez le mot clef  
LOW_PRIORITY
 , l'exécution de l' 
UPDATE
  
sera repoussé jusqu'à ce que aucun client ne lise plus de la table.
Si vous spécifiez le mot clef  
IGNORE
 , la mise à jour ne s'interrompra pas 
même si on rencontre des problèmes d'unicité de clefs durant l'opération.
Les enregistrements posant problèmes ne seront pas mis à jour. 
Si vous accédez à une colonne d'une table  
tbl_name
  dans une expression,
 
UPDATE
  utilisera la valeur courante de la colonne. Par exemple, la requête 
suivante ajoute une année à l'âge actuel de tout le monde :
 Les requêtes  
UPDATE
  sont évaluées de gauche à droite. Par exemple, la requête 
suivante double la valeur de la colonnes âge, puis l'incrémente :| 
mysql> UPDATE persondata SET age=age+1;
 | 
 Si vous changez la valeur d'une colonne en lui spécifiant sa valeur actuelle, 
MySQL s'en aperçoit et ne fait pas la mise à jour.  
UPDATE
  retourne le nombre d'enregistrements ayant changé.
Depuis la version 3.22 de MySQL, la fonction  
mysql_info()
  de l'API C
retourne le nombre de colonnes qui correspondaient, le nombre de colonnes 
mises à jour et le nombre d'erreurs générées pendant l' 
UPDATE
 .| 
mysql> UPDATE persondata SET age=age*2, age=age+1;
 | 
 
Dans la version 3.23 de MySQL, vous pouvez utilisez le code  
LIMIT #
  pour vous assurer
que seul un nombre d'enregistrements bien précis est changé.
 
Avant MySQL 4.0.13,  
LIMIT
  est une restrictions sur le nombre de lignes affectées.
Cette clause stoppe dès que  
row_count
  ont été trouvées par la clause 
 
WHERE
 .
Depuis la version 4.0.13,  
LIMIT
  est une restriction sur le nombre de lignes
trouvées. La commande s'arrête une fois que  
row_count
  lignes ont été
trouvées par la clause  
WHERE
 , qu'elles ait été changées ou pas. 
Ai une clause  
ORDER BY
  est utilisée (disponible depuis MySQL version 4.0.0), 
les lignes seront modifiées selon cet ordre. Ce n'est vraiment utile qu'en
conjonction avec  
LIMIT
 .
Depuis MySQL version 4.0.4, vous pouvez aussi faire des opérations de  
UPDATE
 
qui couvrent plusieurs tables : L'exemple ci-dessus montre une jointure interne, en utilisant la virgule
comme séparateur, mais une commande  
UPDATE
  multi-table peut utiliser
n'importe quel type de jointure autorisée dans une commande  
SELECT
 , 
tel qu'un  
LEFT JOIN
 .Note : vous ne pouvez pas utiliser  
ORDER BY
  ou  
LIMIT
  avec les 
 
UPDATE
  multi-table.| 
UPDATE items,month SET items.price=month.priceWHERE items.id=month.id;
 | 
 |