Vous venez de voir comment ajouter des informations et interroger votre base de données. Mais le contenu de cette base n'est pas immuable. Vous pouvez le modifier.
Cela se fait simplement et c'est ce que je vais vous montrer dans ce chapitre en m'appuyant toujours sur mon exemple de gestion de tickets dont voici, pour rappel, le MPD :

Modifiez les valeurs enregistrées dans les lignes
La modification de valeurs est réalisée grâce à une requête de type UPDATE
.
Modifier le titre du ticket numéro 64 en « Ajouter le nom du commercial sur l'affichage d'un contrat ».
UPDATE ticket
SET titre = 'Ajouter le nom du commercial sur l''affichage d''un contrat'
WHERE numero = 64;
Dans la requête d'UPDATE
, les informations à mettre à jour sont listées après le mot-clé SET
. Le filtrage des lignes à mettre à jour utilise la clause WHERE
comme dans une requête SELECT
.
Mais vous pouvez aller plus loin en vous basant sur les données déjà présentes.
Pour les évolutions, augmenter de 1 toutes les priorités supérieures ou égales à 2.
UPDATE evolution
SET priorite = priorite + 1
WHERE priorite >= 2;
Si plusieurs colonnes doivent être mises à jour en même temps, séparez-les par des virgules.
Passer en majuscules le nom et en minuscules le prénom des utilisateurs.
UPDATE utilisateur SET
nom = upper(nom),
prenom = lower(prenom)
;
Mais vous pouvez utiliser une clause WHERE
plus complexe.
Augmenter de 2 toutes les priorités supérieures ou égales à 3 pour le projet d'id 18.
UPDATE evolution
SET priorite = priorite + 2
WHERE EXISTS (
SELECT 1 FROM ticket
WHERE ticket.numero = evolution.ticket_numero
AND ticket.projet_id = 18
)
AND priorite >= 3;
Supprimez des lignes
La suppression de lignes se fait à l'aide d'une requête de type DELETE
.
Là encore vous allez utiliser la clause WHERE
pour spécifier les conditions à remplir par les lignes à supprimer.
Supprimer les lignes de la table
historique_statut
concernant le projet d'id 18.
DELETE FROM historique_statut
WHERE EXISTS (
SELECT 1 FROM ticket
WHERE ticket.numero = historique_statut.ticket_numero
AND ticket.projet_id = 18
);
Pour les requêtes DELETE
, je vous conseille de procéder ainsi pour vous assurer de bien supprimer ce que vous voulez et pas plus (ni moins) :
Commencer par écrire une requête
SELECT
avec toutes les conditions pour sélectionner les lignes à supprimer :-- Le but est de supprimer les associations où un ticket est associé à lui-même.-- Je commence par rechercher ces associationsSELECT * FROM ticket_associeWHERE ticket_associe_numero = ticket_numero;Vérifier la liste des lignes remontées par la requête SELECT
Remplacer le
SELECT *
parDELETE
:-- Je transforme la requête de SELECT en requête de DELETEDELETE FROM ticket_associeWHERE ticket_associe_numero = ticket_numero;