TP4 : ajouter, modifier, supprimer un enregistrement dans une table

Création de la table (structure) et insertion des enregistrements

création de la table produit

produit
id_produit
nom
categorie
code
prix
date_achat

Créer une table produit avec comme attributs (colonne champ) :

  1. un attribut id_produit de type entier, cet attribut est une clé primaire et utilise l”attribut « AUTO_INCREMENT ».
  2. un attribut nom de type chaîne de caractères variable de taille 20 caractères maximum.
  3. un attribut categorie de type chaîne de caractères variable de taille 20 caractères maximum.
  4. un attribut code dont le contenu est toujours un entier qui doit être affiché toujours avec une valeur sur 5 digits (quelque soit la valeur ). Le type entier est remplacé par une chaîne de caractères variable de taille 5 caractères maximum pour conserver les 5 caractères.
  5. un attribut prix de type Numérique avec une précision de 5 digits avant la virgule et 2 après.
  6. un attribut date_achat de type DATE.

Insertion des enregistrements (occurrences tuples)

Insérer les enregistrements (occurrences tuples) ci dessous (on ne distingue pas le conditionnement Kg ou à la pièce pour le Prix ), la valeur de l’attribut (colonne) id_produit peut être différent car on ne gère pas les valeurs (AUTO_INCREMENT).

id_produit nom categorie code prix date_achat
1 Pommes fruits 01002 4,5 2021-10-1
2 Poires fruits 01008 4 2021-09-30
3 potiron légumes 02018 3 2021-09-21
4 haricots légumes 02089 18 2021-10-2
5 Cerises fruits 01068 15 2021-09-30
6 Patates légumes 02068 3 2021-09-30


Pour un attribut (une colonne, un champ) de type AUTO_INCREMENT, mettre la valeur null dans l’instruction insert pour créer un enregistrement (une occurrence, un tuple) . Ne jamais mettre de valeur entière, MySQL l’autorise, mais ce n’est pas le cas des autres SGBDR.

Opérations sur les enregistrements

Afficher des enregistrements de la table

  1. Afficher tous les produits
SELECT * FROM  produit ;
  1. Afficher le nom des produits dont le prix est inférieur à 10 €

Aidez vous des informations sur : https://www.w3schools.com/SQL/sql_and_or.asp

+---------+
| nom     |
+---------+
| Pommes  |
| Poires  |
| Potiron |
| Patates |
+---------+


  1. Afficher le nom et le prix des produits dont le prix est compris entre 10 et 15 € (inférieur ou égal à 15 et supérieur ou égal à 10) , proposer 2 solutions (avec AND ou avec BETWEEN)
+---------+-------+
| nom     | prix  |
+---------+-------+
| Cerises | 15.00 |
+---------+-------+

Aidez vous des informations sur : https://www.w3schools.com/SQL/sql_between.asp

  1. Afficher uniquement les légumes
+----------+
| nom      |
+----------+
| Potiron  |
| haricots |
| Patates  |
+----------+

Supprimer un enregistrement

Aidez vous des informations sur : https://www.w3schools.com/SQL/sql_delete.asp

Modifier un enregistrement

  1. Modifier le nom du produit d’identifiant 6 par « Pommes de Terre » ainsi que le prix par 3.5€
  1. Sur le même principe, modifier le produit d’identifiant 5, rajouter 1€ au prix

  2. Pour les plus rapides : Rajouter une semaine à la date d’achat, mais c’est bien plus compliqué ! https://www.w3schools.com/sql/func_mysql_date_add.asp

Modifier la table (la structure)

  1. Ajouter un champ quantite qui est un “numérique” (5 chiffres avant la virgule et 2 après) avant le champ prix (rechercher dans la documentation, mais “before” n’existe pas, il faut donc utiliser “after”)
  2. Supprimer l’attribut (la colonne, le champ) code
  3. Modifier le prix par un “numérique” (15 chiffres avant la virgule et 4 après)

Réflexion sur les types des attributs (colonnes) et leurs valeurs

Dans l’attribut categorie, l’utilisateur écrit toujours un mot avec comme valeur : « fruits », « légumes »


Que se passe t’il si le mot “légumes” n’est pas écrit correctement ? :

  1. ajouter des enregistrements avec “légumes” écrit sans accent, avec une(des) majuscule(s), sans le “s” à la fin, sans accent sur le “é”

ATTENTION : le nom des colonnes proposé par datagrip n’est pas bon, il est possible de déactiver l’affichage de cette aide : “File / Settings / Editor ; Code Style ; Inlay Hints ; disable Parameter Names”

id_produit nom categorie quantite prix date_achat
7 tomate Légume 5 4 2021-09-30
8 salade verte legumes 5 1,5 2021-09-30
9 radis noir LEGUMES 5 3,5 2021-09-30
  1. Afficher uniquement les légumes


Résultat possible :

+-----------------+-----------+
| nom             | categorie |
+-----------------+-----------+
| Potiron         | Légumes   |
| haricots        | Légumes   |
| Pommes de Terre | Légumes   |
| Salade verte    | legumes   |
| radis noir      | LEGUMES   |
+-----------------+-----------+
  1. Ajouter un attribut (une colonne) categorie_id de type int, juste après la colonne categorie

contenu de la table produit

+------------+-----------------+-----------+--------------+----------+---------+------------+
| id_produit | nom             | categorie | categorie_id | quantite | prix    | date_achat |
+------------+-----------------+-----------+--------------+----------+---------+------------+
|          1 | Pommes          | Fruits    |         NULL |     NULL |  4.5000 | 2021-10-01 |
|          3 | Potiron         | Légumes   |         NULL |     NULL |  3.0000 | 2021-09-21 |
|          4 | haricots        | Légumes   |         NULL |     NULL | 18.0000 | 2021-10-02 |
|          5 | Cerises         | Fruits    |         NULL |     NULL | 16.0000 | 2021-09-30 |
|          6 | Pommes de Terre | Légumes   |         NULL |     NULL |  3.5000 | 2021-09-30 |
|          7 | Poires          | Fruits    |         NULL |     NULL |  4.0000 | 2021-09-30 |
|          8 | tomate          | Légume    |         NULL |        5 |  4.0000 | 2021-09-30 |
|          9 | Salade verte    | legumes   |         NULL |        5 |  1.5000 | 2021-09-30 |
|         10 | radis noir      | LEGUMES   |         NULL |      3.5 |  5.0000 | 2021-09-30 |
+------------+-----------------+-----------+--------------+----------+---------+------------+``

Notion de clé étrangère

Pour faire référence à la catégorie de légumes, il est préférable d’utiliser une autre table pour éviter les ambiguïtés et éviter de dupliquer des informations dans une même table


Sur le même principe, on désire enregistrer le nom du fournisseur, son adresse, son téléphone et minimiser les erreurs si une des informations concernant les fournisseurs change.


Proposer une solution pour sauvegarder ces informations et modifier votre schéma en conséquence


Les relations (pour les plus rapides)