Opérations d'importation et d'exportation MySQL

MySQLBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez les compétences essentielles pour importer et exporter des données dans une base de données MySQL. Vous pratiquerez le chargement de données à partir d'un fichier CSV (Comma-Separated Values) dans une table en utilisant la commande LOAD DATA INFILE, une méthode rapide et efficace pour l'insertion de données en masse.

Vous apprendrez également le processus inverse : exporter des données d'une table vers un nouveau fichier CSV. De plus, ce laboratoire couvre l'exécution de vérifications de validation de données de base après une importation pour garantir la qualité des données. À la fin de ce laboratoire, vous maîtriserez le déplacement des données dans et hors de MySQL.

Préparer la base de données et la table

Avant de pouvoir importer des données, vous avez besoin d'une destination pour celles-ci. Cela implique la création d'une base de données pour abriter vos données et d'une table dont la structure correspond aux données que vous avez l'intention d'importer.

Tout d'abord, ouvrez le terminal depuis votre bureau.

Connectez-vous au serveur MySQL en tant qu'utilisateur root. Dans cet environnement de laboratoire, vous pouvez utiliser sudo pour vous connecter sans mot de passe.

sudo mysql -u root

Une fois connecté, vous verrez l'invite MySQL (mysql>), qui indique que vous interagissez maintenant directement avec le serveur de base de données.

Ensuite, créez une nouvelle base de données nommée company. La clause IF NOT EXISTS est une bonne pratique qui empêche une erreur si la base de données a déjà été créée.

CREATE DATABASE IF NOT EXISTS company;

Maintenant, basculez vers votre base de données nouvellement créée afin que toutes les commandes suivantes s'appliquent à celle-ci.

USE company;

Enfin, créez une table nommée employees pour stocker les données des employés. La structure de la table doit correspondre aux colonnes du fichier CSV que vous importerez plus tard.

CREATE TABLE IF NOT EXISTS employees (
    id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department VARCHAR(50)
);
  • INT PRIMARY KEY: Définit la colonne id comme un entier et une clé primaire, ce qui signifie que chaque valeur doit être unique.
  • VARCHAR(50): Définit une colonne qui peut stocker une chaîne de caractères de longueur variable jusqu'à 50 caractères.

Vous pouvez vérifier que la table a été créée avec succès en exécutant :

SHOW TABLES;

Vous devriez voir la table employees listée dans la sortie.

+-------------------+
| Tables_in_company |
+-------------------+
| employees         |
+-------------------+
1 row in set (0.00 sec)

Laissez le shell MySQL ouvert, car vous continuerez à l'utiliser dans l'étape suivante.

Importer des données à partir d'un fichier CSV

Avec la base de données et la table prêtes, vous pouvez maintenant importer des données à partir d'un fichier externe. L'instruction LOAD DATA INFILE est un moyen très efficace de charger des données en masse à partir d'un fichier texte dans une table.

Le script de configuration de ce laboratoire a déjà créé un fichier nommé employees.csv dans le répertoire /tmp. Avant d'importer, il est conseillé d'inspecter le contenu du fichier.

Important : Vous devrez ouvrir un nouvel onglet de terminal pour cette commande, car votre terminal actuel exécute le shell MySQL. Cliquez sur l'icône + dans la fenêtre du terminal pour ouvrir un nouvel onglet. Dans le nouveau terminal, exécutez :

cat /tmp/employees.csv

La sortie montre quatre lignes de données séparées par des virgules :

1,John,Doe,john.doe@example.com,Sales
2,Jane,Smith,jane.smith@example.com,Marketing
3,Peter,Jones,peter.jones@example.com,Engineering
4,Mary,Brown,mary.brown@example.com,HR

Maintenant, revenez à votre onglet de terminal d'origine avec le shell MySQL (mysql>). Utilisez la commande LOAD DATA INFILE pour importer le fichier.

LOAD DATA INFILE '/tmp/employees.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Analysons cette commande :

  • LOAD DATA INFILE '/tmp/employees.csv': Spécifie le chemin d'accès complet et absolu au fichier source.
  • INTO TABLE employees: Spécifie la table cible pour les données.
  • FIELDS TERMINATED BY ',': Indique à MySQL que les virgules séparent les champs de données (colonnes) dans chaque ligne.
  • LINES TERMINATED BY '\n': Indique à MySQL que chaque nouvelle ligne dans le fichier représente une nouvelle ligne.

Après l'exécution de la commande, MySQL signalera le nombre de lignes importées. Pour vérifier que l'importation a réussi, interrogez la table pour voir son contenu.

SELECT * FROM employees;

La sortie devrait afficher les quatre enregistrements du fichier CSV, maintenant stockés dans votre table employees.

+----+------------+-----------+---------------------------+-------------+
| id | first_name | last_name | email                     | department  |
+----+------------+-----------+---------------------------+-------------+
|  1 | John       | Doe       | john.doe@example.com      | Sales       |
|  2 | Jane       | Smith     | jane.smith@example.com    | Marketing   |
|  3 | Peter      | Jones     | peter.jones@example.com   | Engineering |
|  4 | Mary       | Brown     | mary.brown@example.com    | HR          |
+----+------------+-----------+---------------------------+-------------+
4 rows in set (0.00 sec)

Exporter les résultats de requête vers un fichier CSV

L'exportation de données est aussi importante que l'importation. Vous pourriez avoir besoin de créer des rapports, de partager des données avec d'autres systèmes ou d'effectuer des analyses dans un programme de tableur. L'instruction SELECT ... INTO OUTFILE vous permet d'enregistrer le résultat de n'importe quelle requête directement dans un fichier.

Tout d'abord, ajoutons deux employés supplémentaires à la table dans votre shell MySQL.

INSERT INTO employees (id, first_name, last_name, email, department) VALUES
(5, 'Alice', 'Johnson', 'alice.johnson@example.com', 'Sales'),
(6, 'Bob', 'Williams', 'bob.williams@example.com', 'Marketing');

Maintenant, exportez l'intégralité de la table employees vers un nouveau fichier nommé employees_export.csv. Tout d'abord, assurez-vous que vous êtes toujours dans la bonne base de données :

SELECT id, first_name, last_name, email, department
FROM company.employees
INTO OUTFILE '/tmp/employees_export.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
  • SELECT ...: Il s'agit d'une requête standard qui spécifie quelles données exporter.
  • INTO OUTFILE '/tmp/employees_export.csv': Spécifie le chemin complet du fichier de sortie. Pour des raisons de sécurité, MySQL exige que ce fichier n'existe pas déjà.
  • FIELDS TERMINATED BY ',': Sépare les champs par une virgule.
  • ENCLOSED BY '"': Encadre chaque valeur de champ entre guillemets doubles, ce qui est un format CSV courant.
  • LINES TERMINATED BY '\n': Termine chaque ligne par un caractère de nouvelle ligne.

Après avoir exécuté la commande, basculez vers votre autre onglet de terminal (ou ouvrez-en un nouveau) et affichez le contenu du fichier nouvellement créé.

cat /tmp/employees_export.csv

Vous verrez les six lignes de votre table, formatées en fichier CSV.

"1","John","Doe","john.doe@example.com","Sales"
"2","Jane","Smith","jane.smith@example.com","Marketing"
"3","Peter","Jones","peter.jones@example.com","Engineering"
"4","Mary","Brown","mary.brown@example.com","HR"
"5","Alice","Johnson","alice.johnson@example.com","Sales"
"6","Bob","Williams","bob.williams@example.com","Marketing"

Valider les données importées

Après avoir importé des données, il est crucial de les valider pour garantir leur qualité et leur intégrité. Les données du monde réel sont souvent désordonnées, contenant des erreurs, des valeurs manquantes ou des formats incorrects. Cette étape vous montre comment utiliser des requêtes SQL simples pour trouver des problèmes courants.

Le script de configuration a créé employees_validation.csv, qui contient un e-mail invalide et une valeur de département manquante. Tout d'abord, videz la table employees dans votre shell MySQL.

TRUNCATE TABLE employees;

Maintenant, importez le fichier de validation.

LOAD DATA INFILE '/tmp/employees_validation.csv'
INTO TABLE employees
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Une fois les données "sales" chargées, exécutons quelques vérifications de validation.

1. Trouver les formats d'e-mail invalides

Une vérification très basique d'un e-mail valide consiste à voir s'il contient un symbole @ et un symbole .. Nous pouvons utiliser NOT LIKE pour trouver les lignes qui échouent à cette vérification.

SELECT * FROM employees WHERE email NOT LIKE '%@%.%';

Cette requête trouvera la ligne où l'e-mail est invalid_email, car il lui manque les symboles requis.

+----+------------+-----------+---------------+------------+
| id | first_name | last_name | email         | department |
+----+------------+-----------+---------------+------------+
|  3 | Invalid    | Email     | invalid_email | Sales      |
+----+------------+-----------+---------------+------------+
1 row in set (0.00 sec)

2. Trouver les départements manquants

Vous pouvez trouver les lignes où une valeur est manquante en vérifiant une chaîne vide ''.

SELECT * FROM employees WHERE department = '';

Cette requête trouvera la ligne où le département a été laissé vide dans le fichier CSV.

+----+------------+------------+--------------------------------+------------+
| id | first_name | last_name  | email                          | department |
+----+------------+------------+--------------------------------+------------+
|  4 | Missing    | Department | missing.department@example.com |            |
+----+------------+------------+--------------------------------+------------+
1 row in set (0.00 sec)

Ces requêtes simples sont des outils puissants pour une première vérification de la qualité des données. Après avoir identifié les lignes problématiques, vous pouvez décider de les corriger avec des instructions UPDATE ou de les supprimer avec DELETE.

Vous avez maintenant terminé le laboratoire. Vous pouvez quitter le shell MySQL.

exit

Résumé

Dans ce laboratoire, vous avez appris les opérations fondamentales pour déplacer des données vers et depuis une base de données MySQL. Vous avez commencé par configurer un environnement de base de données approprié avec une nouvelle base de données et une nouvelle table. Vous avez ensuite utilisé la commande LOAD DATA INFILE pour importer efficacement des données à partir d'un fichier CSV.

Ensuite, vous vous êtes exercé à exporter des données d'une table vers un nouveau fichier CSV en utilisant l'instruction SELECT ... INTO OUTFILE, une tâche courante pour la génération de rapports et le partage de données. Enfin, vous avez appris à effectuer une validation de données de base avec des requêtes SQL pour vérifier les erreurs de formatage et les valeurs manquantes après une importation. Ces compétences sont essentielles pour tout développeur ou administrateur travaillant avec MySQL.