6.2. Modifier des données

La modification de données déjà présentes dans la base est appelée mise à jour (update en anglais). Vous pouvez mettre à jour une ligne spécifique, toutes les lignes d'une table ou un sous-ensemble des lignes de la table. Chaque colonne peut être mise à jour séparément ; les autres colonnes ne sont pas modifiées.

Pour faire une mise à jour, il faut trois informations :

  1. le nom de la table et de la colonne à mettre à jour ;

  2. la nouvelle valeur de la colonne ;

  3. les lignes à mettre à jour.

Nous avons vu dans le Chapitre 5 que le SQL ne donne pas par défaut d'identifiant unique pour les lignes. Du coup, il n'est pas nécessairement possible d'indiquer directement quelle ligne il faut mettre à jour. À la place, nous indiquons quelles conditions une ligne doit remplir pour être mise à jour. Si la table a une clé primaire (qu'elle soit déclarée ou non), nous pouvons indiquer une ligne unique en donnant une condition qui porte sur la clé primaire. Les outils graphiques d'accès aux bases de données utilisent ce principe pour vous permettre de modifier les lignes individuellement.

Par exemple, cette commande modifie tous les produits qui ont un prix de 5 et met leur prix à 10.

UPDATE produits SET prix = 10 WHERE prix = 5;

Ceci peut mettre à jour zéro, une ou plusieurs lignes. Ce n'est pas une erreur d'exécuter une commande UPDATE qui ne met à jour aucune ligne.

Voyons la commande en détail : d'abord, il y a le mot clé UPDATE suivi par le nom de la table. Comme d'habitude, le nom de la table peut être précisé par un nom de schéma, sans quoi le schéma est recherché dans le chemin. Ensuite, il y a le mot clé SET suivi par le nom de la colonne, un signe égal et la nouvelle valeur de la colonne. La nouvelle valeur de la colonne 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;

Comme vous le voyez, l'expression donnant la nouvelle valeur peut faire référence à l'ancienne valeur. Nous n'avons pas encore parlé de la clause WHERE. Si elle est omise, cela veut dire que toutes les lignes de la table sont modifiées. Si elle est présente, seules les lignes qui remplissent la condition après le WHERE sont mises à jour. Remarquez que le signe égal dans la clause SET est une affectation, alors que celui de la clause WHERE est une comparaison, mais cela ne crée pas d'ambiguïté. Bien sûr, les conditions ne sont pas nécessairement des tests d'égalité. De nombreux autres opérateurs existent (voir le Chapitre 9). Mais l'expression doit s'évaluer en une expression booléenne.

Il est aussi possible de mettre plus d'une colonne à jour dans une commande UPDATE en indiquant plusieurs colonnes dans la clause SET. Par exemple :

UPDATE matable SET a = 5, b = 3, c = 1 WHERE a > 0;