SQL2a.LMD Langage de modification des Données

SIO > S1_Commun > S1C8_Donnees > sql2a_lmd1.md

Les requêtes action ; delete, update, insert

Les clauses sql DELETE FROM, UPDATE et INSERT INTO sont vachement plus simple à utiliser que SELECT !!!

Introduction

Les requêtes action sont des requêtes qui modifient le contenu de la base de données.

Les clauses du langage de modification des données (LMD) sont les suivantes en conditions normales :

Suppression d'enregistrements

[sql]
DELETE FROM table 
WHERE … 
;

Attention, pas de champs derrière delete !

WHERE peut contenir tout ce qu'un where normal peut contenir. Entre autre des calculs, des sous requêtes, etc.

Modification d'enregistrements

[sql]
UPDATE table SET attribut1=nouvelleValeur, attribut2=expression,WHERE … 
;

Attention, pas de from derrière update !

Insertion de nouveaux enregistrements dans une table

[sql]
INSERT INTO table (Attribut1, Attribut2, Attribut3,) 
VALUES ( valeurAttribut1, valeurAttribut2, valeurAttribut3,)
;

Attention, pas de where derrière insert into !

Dans la requête INSERT INTO, il est possible d'indiquer la liste des attributs à remplir si on ne dispose pas de toutes les valeurs.

INSERT INTO :

  • Le taquet aura un poids de 0 car il n'a pas été renseigné
  • Les valeurs DOIVENT être dans le même ordre que les champs désignés.
  • Si on n'avait pas indiqué les champs, il aurait fallu donner une valeur à chacun, dans l'ordre des champs de la table,
  • Il est possible d'insérer plusieurs lignes, comme dans l'exemple ci-après.

Exemples :

Rédiger les requêtes suivantes :

  • Supprimer les articles qui contiennent les lettres "an" dans la désignation (on écrira descArt LIKE "%an%").
  • L'article "Bouée" a été valorisé à 45€ par erreur. Son prix doit être de 145€
  • Ajouter le nouvel article produit fini (type="F") A5 : "Taquet" , au prix de 14,34€ dans la table Article.

Attention, la virgule dans les nombres est notée '.'
Le SQL est le suivant :

[sql]
DELETE FROM Article WHERE descArt LIKE "%an%" ;
 
UPDATE Article SET prixHtArt=145 WHERE artDesc="Bouée" ;
 
INSERT INTO Article (refArt, descArt, prixHtArt, typeArt) 
     VALUES ("A5", "Taquet", 14.34, "F"),
	    ("A6", "Mousqueton", 27.90, "F") ;

FINI !

Etonnant, non?
Pas de jointures, pas d'agrégat ni de having, pas de tri. Le pied !

En fait, il y a des choses auxquelles il faut faire attention, comme, par exemple :

  • ne pas supprimer une ligne qui est cible d'une clé étrangère : on obtient une jolie erreur
  • ne pas modifier la clé primaire d'un enregirstrement, ça risque de F... la M... dans la base
  • ne pas ajouter deux fois le même enregistrement : on obtient aussi une erreur, la clé primaire sera en double !!!
  • bien respecter l'ordre des champs dans INSERT INTO

Le reste concerne des choses déjà dites, en particulier à propos de la clause WHERE.

Note : ceci est un aperçu du SQL, pas un cours complet. Le SQL avancé est pour plus tard.