Insérer des données dans des tables MySQL en invite de commande

Pour insérer des données dans des tables, il faut utiliser la commande

INSERT INTO nomDeLaTable VALUES (Valeur1,Valeur2,Valeur3,…);

Tout d’abord, un petit rappel :

Qu’avons-nous comme tables dans notre base de données « magasin »?

MariaDB [(none)]> USE magasin;
Database changed
MariaDB [magasin]> SHOW tables;
+-------------------+
| Tables_in_magasin |
+-------------------+
| clients           |
| marchandises      |
| ventes            |
+-------------------+
3 rows in set (0.07 sec)

MariaDB [magasin]> DESCRIBE clients;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| num_client | int(11)     | NO   | PRI | NULL    | auto_increment |
| nom        | varchar(20) | YES  |     | NULL    |                |
| prenom     | varchar(20) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
3 rows in set (0.19 sec)

MariaDB [magasin]>

La commande DESCRIBE clients; permet de se remémorer les attributs ou colonnes (rows) et leurs caractéristiques et d’ainsi ne pas se tromper lorsqu’on va y insérer des valeurs.

En effet, le premier attribut num_client est un integer autoincrémenté qui se génère seul, donc nous y mettrons la valeur NULL pour laisser le serveur y mettre une valeur lui-même. A savoir qu’il va évidemment commencer par 1 puis 2,3,4,…

Les deux autres attributs sont des chaînes de caractères.

Insérons la première ligne de valeurs :

MariaDB [magasin]> INSERT INTO clients
        -> VALUES(NULL,"Hermes","Simone");
Query OK, 1 row affected (0.06 sec)

MariaDB [magasin]>

Vérifions si cette ligne est bien enregistrée avec la commande SELECT * FROM clients; (Lis (sélectionne) toutes les données de la table « clients »)

MariaDB [magasin]> SELECT * FROM clients;
+------------+--------+--------+
| num_client | nom    | prenom |
+------------+--------+--------+
|          1 | Hermes | Simone |
+------------+--------+--------+
1 row in set (0.00 sec)

MariaDB [magasin]>

Insérons plusieurs lignes de données à la fois :

MariaDB [magasin]> INSERT INTO clients
        -> VALUES (NULL,"Benetton","Karim"),
        -> (NULL,"Ericcsson","Rodrigue"),
        -> (NULL,"Adidas","Kitty");
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [magasin]>

Vérifions !

MariaDB [magasin]> SELECT * FROM clients;
+------------+-----------+----------+
| num_client | nom       | prenom   |
+------------+-----------+----------+
|          1 | Hermes    | Simone   |
|          2 | Benetton  | Karim    |
|          3 | Ericcsson | Rodrigue |
|          4 | Adidas    | Kitty    |
+------------+-----------+----------+
4 rows in set (0.00 sec)

MariaDB [magasin]>

Autre syntaxe permettant d’insérer plusieurs lignes en spécifiant les attributs :

MariaDB [magasin]> INSERT INTO clients
        -> (num_client,nom,prenom)
        -> VALUES
        -> (NULL,"Jaures","Jean"),
        -> (NULL,"Cesar","Jules");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [magasin]>

Vérifions !

MariaDB [magasin]> SELECT * FROM clients;
+------------+-----------+----------+
| num_client | nom       | prenom   |
+------------+-----------+----------+
|          1 | Hermes    | Simone   |
|          2 | Benetton  | Karim    |
|          3 | Ericcsson | Rodrigue |
|          4 | Adidas    | Kitty    |
|          5 | Jaures    | Jean     |
|          6 | Cesar     | Jules    |
+------------+-----------+----------+
6 rows in set (0.00 sec)

MariaDB [magasin]>

La même syntaxe permettant d’insérer les données dans le désordre :

MariaDB [magasin]> INSERT INTO clients
        -> (prenom,num_client,nom)
        -> VALUES
        -> ("Fabrice",NULL,"Dumont"),
        -> ("Arthur",NULL,"Rimbaud");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [magasin]>

Vérifions ! Les données sont dans l’ordre !

MariaDB [magasin]> SELECT * FROM clients;
+------------+-----------+----------+
| num_client | nom       | prenom   |
+------------+-----------+----------+
|          1 | Hermes    | Simone   |
|          2 | Benetton  | Karim    |
|          3 | Ericcsson | Rodrigue |
|          4 | Adidas    | Kitty    |
|          5 | Jaures    | Jean     |
|          6 | Cesar     | Jules    |
|          7 | Dumont    | Fabrice  |
|          8 | Rimbaud   | Arthur   |
+------------+-----------+----------+
8 rows in set (0.00 sec)

MariaDB [magasin]>

Une variante :

MariaDB [magasin]> INSERT INTO clients
        -> SET num_client=NULL,nom="Lefol",prenom="Sebastien";
Query OK, 1 row affected (0.00 sec)

MariaDB [magasin]>

Cette variante est propre à MySQL/MariaDB et ne permet pas des insertions multiples.

D’autres systèmes de gestion de bases de données ne permettent pas d’encoder avec cette syntaxe.

Vérifions ! Toutes nos données sont là !

MariaDB [magasin]> SELECT * FROM clients;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          1 | Hermes    | Simone    |
|          2 | Benetton  | Karim     |
|          3 | Ericcsson | Rodrigue  |
|          4 | Adidas    | Kitty     |
|          5 | Jaures    | Jean      |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          8 | Rimbaud   | Arthur    |
|          9 | Lefol     | Sebastien |
+------------+-----------+-----------+
9 rows in set (0.00 sec)

MariaDB [magasin]>

Nous allons insérer des données dans la table « marchandises ». Vérifions d’abord quels sont ses attributs :

MariaDB [magasin]> describe marchandises;
+-------------------------+-------------+------+-----+---------+----------------+
| Field                   | Type        | Null | Key | Default | Extra          |
+-------------------------+-------------+------+-----+---------+----------------+
| num_marchandise         | int(11)     | NO   | PRI | NULL    | auto_increment |
| nom_marchandise         | varchar(20) | YES  |     | NULL    |                |
| prix_marchandise        | int(11)     | NO   |     | NULL    |                |
| description_marchandise | text        | YES  |     | NULL    |                |
+-------------------------+-------------+------+-----+---------+----------------+
4 rows in set (0.27 sec)

MariaDB [magasin]>

Variable d’un type nouveau TEXT (description_marchandise). Elle permet d’y insérer un texte long non limité.

MariaDB [magasin]> INSERT INTO marchandises
        -> VALUES
        -> (NULL,"Carottes",3,"Carottes du sud de l'Italie / paquet de 10"),
        -> (NULL,"Tomates",5,"Tomates des Pays-Bas / caisse de 15 / Bio"),
        -> (NULL,"Cerises",4,"Cerises du Quercy, France / ravier de 150 gr"),
        -> (NULL,"Endives",6,"Endives de Wallonie, Belgique / caisse de 20"),
        -> (NULL,"Vin",4,"Vin de table provencal, France / 1 litre"),
        -> (NULL,"Eau",2,"Eau des Alpes italiennes, Italie / 1.5 litre");
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

MariaDB [magasin]>

Vérifions !

MariaDB [magasin]> SELECT * FROM marchandises;
+-----------------+-----------------+------------------+----------------------------------------------+
| num_marchandise | nom_marchandise | prix_marchandise | description_marchandise                      |
+-----------------+-----------------+------------------+----------------------------------------------+
|               1 | Carottes        |                3 | Carottes du sud de l'Italie / paquet de 10   |
|               2 | Tomates         |                5 | Tomates des Pays-Bas / caisse de 15 / Bio    |
|               3 | Cerises         |                4 | Cerises du Quercy, France / ravier de 150 gr |
|               4 | Endives         |                6 | Endives de Wallonie, Belgique / caisse de 20 |
|               5 | Vin             |                4 | Vin de table provencal, France / 1 litre     |
|               6 | Eau             |                2 | Eau des Alpes italiennes, Italie / 1.5 litre |
+-----------------+-----------------+------------------+----------------------------------------------+
6 rows in set (0.00 sec)

MariaDB [magasin]>

Nous allons maintenant insérer des données dans la dernière table « ventes ».

Quels sont ses attributs ?

MariaDB [magasin]> DESCRIBE ventes;
+-----------------+---------+------+-----+---------+----------------+
| Field           | Type    | Null | Key | Default | Extra          |
+-----------------+---------+------+-----+---------+----------------+
| num_vente       | int(11) | NO   | PRI | NULL    | auto_increment |
| date_vente      | date    | YES  |     | NULL    |                |
| marchandise_num | int(11) | YES  | MUL | NULL    |                |
| client_num      | int(11) | YES  | MUL | NULL    |                |
+-----------------+---------+------+-----+---------+----------------+
4 rows in set (0.13 sec)

MariaDB [magasin]>

Un nouveau type de valeur : DATE. Attention, les données doivent être encodées sous le format anglo-saxon « 2018-02-16 » pour 16-02-2018.

Deux clés étrangères sont présentes : marchandise_num et client_num (MUL -> multiple) faisant référence à num_marchandise et num_client des tables « marchandises » et « clients ».

Insérons des données :

MariaDB [magasin]> INSERT INTO ventes
        -> VALUES
        -> (NULL,"2018-02-13",1,4);
Query OK, 1 row affected (0.05 sec)

MariaDB [magasin]>

Ce qui veut dire que le premier achat enregistré est celui de Kitty Adidas (4ème valeur de la table « clients ») qui a acheté des carottes (1ère valeur de la table « marchandises ») le 13/02/2018.

MariaDB [magasin]> SELECT * FROM ventes;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
+-----------+------------+-----------------+------------+
1 row in set (0.00 sec)

MariaDB [magasin]>

Continuons à insérer des données :

MariaDB [magasin]> INSERT INTO ventes
        -> VALUES
        -> (NULL,"2018-02-13",2,7),
        -> (NULL,"2018-02-13",4,7),
        -> (NULL,"2018-02-13",5,5),
        -> (NULL,"2018-02-13",6,3),
        -> (NULL,"2018-02-13",6,1),
        -> (NULL,"2018-02-13",1,5);
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

MariaDB [magasin]>

La table « ventes » avec toutes ses données :

MariaDB [magasin]> SELECT * FROM ventes;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
|         2 | 2018-02-13 |               2 |          7 |
|         3 | 2018-02-13 |               4 |          7 |
|         4 | 2018-02-13 |               5 |          5 |
|         5 | 2018-02-13 |               6 |          3 |
|         6 | 2018-02-13 |               6 |          1 |
|         7 | 2018-02-13 |               1 |          5 |
+-----------+------------+-----------------+------------+
7 rows in set (0.00 sec)

MariaDB [magasin]>

Et enfin, voilà quel est mon truc pour savoir ce que je rentre comme clés étrangères, je fais apparaître les données de mes deux autres tables au-dessus de ma commande d’insertion dans la table « ventes » :

MariaDB [magasin]> select * from clients;
+------------+-----------+-----------+
| num_client | nom       | prenom    |
+------------+-----------+-----------+
|          1 | Hermes    | Simone    |
|          2 | Benetton  | Karim     |
|          3 | Ericcsson | Rodrigue  |
|          4 | Adidas    | Kitty     |
|          5 | Jaures    | Jean      |
|          6 | Cesar     | Jules     |
|          7 | Dumont    | Fabrice   |
|          8 | Rimbaud   | Arthur    |
|          9 | Lefol     | Sebastien |
+------------+-----------+-----------+
9 rows in set (0.04 sec)

MariaDB [magasin]> select * from marchandises;
+-----------------+-----------------+------------------+----------------------------------------------+
| num_marchandise | nom_marchandise | prix_marchandise | description_marchandise                      |
+-----------------+-----------------+------------------+----------------------------------------------+
|               1 | Carottes        |                3 | Carottes du sud de l'Italie / paquet de 10   |
|               2 | Tomates         |                5 | Tomates des Pays-Bas / caisse de 15 / Bio    |
|               3 | Cerises         |                4 | Cerises du Quercy, France / ravier de 150 gr |
|               4 | Endives         |                6 | Endives de Wallonie, Belgique / caisse de 20 |
|               5 | Vin             |                4 | Vin de table provencal, France / 1 litre     |
|               6 | Eau             |                2 | Eau des Alpes italiennes, Italie / 1.5 litre |
+-----------------+-----------------+------------------+----------------------------------------------+
6 rows in set (0.01 sec)

MariaDB [magasin]> INSERT INTO ventes
        -> VALUES
        -> (NULL,"2018-02-13",1,4);
Query OK, 1 row affected (0.05 sec)

MariaDB [magasin]> SELECT * FROM ventes;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
+-----------+------------+-----------------+------------+
1 row in set (0.00 sec)

MariaDB [magasin]> INSERT INTO ventes
        -> VALUES
        -> (NULL,"2018-02-13",2,7),
        -> (NULL,"2018-02-13",4,7),
        -> (NULL,"2018-02-13",5,5),
        -> (NULL,"2018-02-13",6,3),
        -> (NULL,"2018-02-13",6,1),
        -> (NULL,"2018-02-13",1,5);
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

MariaDB [magasin]> SELECT * FROM ventes;
+-----------+------------+-----------------+------------+
| num_vente | date_vente | marchandise_num | client_num |
+-----------+------------+-----------------+------------+
|         1 | 2018-02-13 |               1 |          4 |
|         2 | 2018-02-13 |               2 |          7 |
|         3 | 2018-02-13 |               4 |          7 |
|         4 | 2018-02-13 |               5 |          5 |
|         5 | 2018-02-13 |               6 |          3 |
|         6 | 2018-02-13 |               6 |          1 |
|         7 | 2018-02-13 |               1 |          5 |
+-----------+------------+-----------------+------------+
7 rows in set (0.00 sec)

MariaDB [magasin]>

Ainsi j’ai une vue d’ensemble de mes trois tables !