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
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]
|
Syntaxe multi-tables :
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...] SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
|
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é.
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 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 :
mysql> UPDATE persondata SET age=age+1;
|
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*2, 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
.
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 :
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
|
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.
|