update
. Voici la syntaxe de cette commande.
Exemple 56. Forme générale de l'
update
UPDATE nom_de_table SET nom_de_colonne = nouvelle_valeur [, nom_de_colonne = nouvelle_valeur, ...] [WHERE predicat]Là encore, la clause
where
est très importante. Si elle est omise, alors la modification se fera sur toutes les lignes de la table. Une précaution élémentaire consiste donc à commencer par tester sa clause
where
en faisant un
select
, afin de vérifier si les modifications que l'on veut faire se feront bien sur les bonnes lignes.
Les modifications spécifiées dans les clauses
set
sont faites pour toutes les lignes
en même temps
. Le fonctionnement est donc le même que pour la commande
delete
. Si une erreur est générée lors de l’opération, l’ensemble des modifications est annulé.
En particulier, il est possible d’écrire ce genre de choses en SQL :
a
et
b
sont bien échangées.
S'il n'est pas possible de mettre à jour des éléments appartenant à plusieurs tables à la fois, la clause
where
peut, en revanche, interroger les données de plusieurs tables.
Enfin, précisons que les contraintes d'intégrité doivent toujours être vérifiées à l'issue d'une commande
update
. Il est donc possible qu'une telle commande échoue.
select
.
Prenons l'exemple suivant : on possède une table
Marins
, avec, entre autres, une colonne
commune_naissance
. Cette colonne porte le nom de la commune de naissance de chaque marin.
Notre projet évolue, et l'on se rend compte qu'il serait plus malin d'avoir une table
Communes
, et une jointure de la table
Marins
vers cette table.
On souhaite donc faire évoluer la table
Marins
vers cette nouvelle structure, et surtout, remplir automatiquement la colonne de jointure que l'on va créer.
Exemple 58. Utilisation d'
update
avec une requête imbriquée
-- création de la table Marins create table Marins ( id int primary key, nom varchar(30), commune_naissance varchar(30) ) ; -- création de la table Communes create table Communes ( id int primary key, nom varchar(30), ) ; -- mise à jour de la table Marins alter table Marins add column id_commune int ; -- mise à jour de la colonne id_commune update Marins set id_commune = (select id from Communes where Communes.nom = Marins.commune_naissance) ;
select
peut être utilisé pour mettre à jour une colonne. Tout se passe comme si, pour chaque ligne de la table
Marins
, la requête imbriquée était exécutée, avec les paramètres de la ligne courante. Bien sûr, il ne faut pas que le résultat de cette requête fasse plus d'une ligne, sans quoi une erreur sera générée.