5. Mettre à jour des données : update

5.1. Forme générale de l' update

La modification de la valeur d’une ligne dans une table passe par l’utilisation de la commande 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 :

Exemple 57. Un UPDATE un peu spécial

update une_table  set a = b, b = a ;

Cette commande, qui constitue un piège classique des langages de programmation (pour débutants seulement), fonctionne en SQL : les valeurs des colonnes 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.

5.2. Mise à jour avec une requête imbriquée

Il est également possible de mettre à jour les valeurs d'une table avec des valeurs lues dans cette même table ou une autre table. En d'autres termes, des valeurs lues par un 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) ;

Cet exemple montre comment le résultat d'une requête de type 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.
Introduction à SQL
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Un peu d'histoire
2. Organisation de la présentation
Un premier exemple
1. Un premier exemple
1.1. Construction d'une première table
1.2. Enregistrer quelques données
1.3. Extraire des données
2. Trier, classer, calculer
2.1. Classer des données
2.2. Trier des données
2.3. Effectuer des calculs
2.4. Mise à jour d'une valeur
3. Sélection sur plusieurs tables
3.1. Ajout du lieu de naissance
3.2. Clés primaires et clés étrangères
Organisation des données
1. Introduction
2. Bases de données, schémas et tables
2.1. Création d'une table
2.2. Création d'une colonne
2.3. Contraintes sur une table
2.4. Nommage des contraintes
2.5. Exemples de création de tables
2.6. Modification d'une table
2.7. Effacement d'une table
2.8. Remarques sur restrict et cascade
3. Types de données
3.1. Les types numériques
3.2. Les types caractère
3.3. Les types temporels
3.4. Les types binaires
3.5. Type auto-incrémental de MySQL
3.6. Type auto-généré de Derby
3.7. Séquences d'Oracle
Manipulation des données
1. Introduction
2. Extraire des données : select
2.1. Extraire des données d'une table unique
2.2. Clause where
2.3. Requêtes imbriquées
2.4. Fonctions d'agrégation, groupage
3. Supprimer des données : delete
3.1. Forme générale du delete
3.2. Effacement en cascade
3.3. Fonctionnement du delete
4. Ajouter des données : insert
4.1. Forme générale de l' insert
4.2. Copie d'une table dans une autre
5. Mettre à jour des données : update
5.1. Forme générale de l' update
5.2. Mise à jour avec une requête imbriquée
Interrogations sur plusieurs tables
1. Introduction
2. Formes normales
2.1. Première forme normale
2.2. Deuxième forme normale
2.3. Troisième forme normale
2.4. Formes normales d'ordres supérieurs
3. Relations entre éléments
3.1. Cardinalité d'une relation
3.2. Relation 1:1
3.3. Relation 1:p
3.4. Relation p:1
3.5. Relation n:p
4. Jointures
4.1. Jointure interne
4.2. Jointure externe
4.3. Auto-jointure
5. Unions
6. Vues
6.1. Création d'une vue
6.2. Exemples de vues
Transactions
1. Introduction
2. Isolation des transactions
2.1. ACIDité d'une transaction
2.2. Définition de l'isolation
3. Gestion d'une transaction
3.1. Mode auto-commit
3.2. Fixer le niveau d'isolation
3.3. Démarrer une transaction
3.4. Terminer une transaction
3.5. Remarques importantes
Index
1. Introduction
2. Manipulation d'index
2.1. Création automatique d'index
2.2. Création manuelle d'index