Documentation PostgreSQL 8.1.23 > Langage SQL > Manipulation de données > Mise à jour de données | |
Manipulation de données | Suppression de données |
La modification de données présentes en base est appelée mise à jour (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 mise à jour 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écisera 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 de 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 de mettre plus d'une colonne à jour par une seule commande UPDATE en indiquant plusieurs colonnes dans la clause SET.
Par exemple :
UPDATE ma_table SET a = 5, b = 3, c = 1 WHERE a > 0;