6.2. Actualiser les données
La modification de données présentes en base est appelée mise à jour
ou actualisation (
update
en anglais). Il est possible de
mettre à jour une ligne spécifique, toutes les lignes ou un
sous-ensemble de lignes de la table. Chaque colonne peut être
actualiser séparément ; les autres colonnes ne sont alors pas
modifiées.
Pour réaliser une mise à jour, trois informations sont nécessaires :
-
le nom de la table et de la colonne à mettre à jour ;
-
la nouvelle valeur de la colonne ;
-
les lignes à mettre à jour.
Comme cela a été vu dans le Chapitre 5,
Définition des données, le SQL ne donne pas, par défaut,
d'identifiant unique pour les lignes. Il n'est, de ce fait, pas
toujours possible d'indiquer directement la ligne à mettre à jour. On
précise plutôt les conditions qu'une ligne doit remplir pour être
mise à jour. Si la table possède une clé primaire (qu'elle soit
déclarée ou non), une ligne unique peut être choisie en précisant une
condition sur la clé primaire. Les outils graphiques d'accès aux
bases de données utilisent ce principe pour permettre les
modifications de lignes individuelles.
La commande suivante, par exemple, modifie tous les produits dont le
prix est 5 en le passant à 10.
UPDATE produits SET prix = 10 WHERE prix = 5;
Cela peut mettre à jour zéro, une, ou plusieurs lignes. L'exécution
d'une commande UPDATE qui ne met à jour
aucune ligne ne représente pas une erreur.
Dans le détail de la commande, on trouve tout d'abord, le mot clé
UPDATE suivi du nom de la table. Le nom de
la table peut toujours être préfixé par un nom de schéma dans le cas
contraire elle est recherchée dans le chemin. On trouve ensuite le
mot clé SET suivi du nom de la colonne, un
signe égal et la nouvelle valeur de la colonne, qui peut être une
constante ou une expression scalaire.
Par exemple, pour augmenter de 10% le prix de tous les produits, on
peut exécuter :
UPDATE produits SET prix = prix * 1.10;
L'expression donnant la nouvelle valeur peut faire référence aux
valeurs courantes de la ligne.
Il n'a pas été indiqué ici de clause WHERE.
Si elle est omise, toutes les lignes de la table sont modifiées. Si
elle est présente, seules les lignes qui remplissent la condition
WHERE sont mises à jour. Le signe égal dans
la clause SET réalise une affectation, alors
que celui de la clause WHERE permet une
comparaison. Pour autant, cela ne crée pas d'ambiguïté. La condition
WHERE n'est pas nécessairement un test
d'égalité de nombreux autres opérateurs existent (voir le Chapitre 9,
Fonctions et opérateurs). Mais le résultat de l'expression est
booléen.
Il est possible d'actualiser plusieurs colonnes en une seule commande
UPDATE
par l'indication
de plusieurs colonnes dans la clause SET.
Par exemple :
UPDATE ma_table SET a = 5, b = 3, c = 1 WHERE a > 0;