3. Prise en main
Ce chapitre vous guide pas à pas : démarrer un serveur MIRAJ, s'y connecter, créer une base, une table, y insérer des données, les interroger, les joindre à une autre table, indexer et inspecter le schéma. À la fin, vous saurez faire tourner un cas d'usage MIRAJ complet.
Les exemples utilisent miraj-cli, la console SQL fournie avec MIRAJ, mais tout se transpose sans changement au protocole réseau de miraj-server avec le client SQL de votre choix.
3.1 Démarrer le serveur#
miraj-server.exe --root D:\donnees --logMIRAJ 1.0.0 Standard - serveur console sur 127.0.0.1:7007, dossier "D:\donnees".Le dossier D:\donnees est créé s'il n'existe pas, avec un compte root local sans mot de passe. Laissez cette fenêtre ouverte : le serveur y reste actif.
3.2 Se connecter avec miraj-cli#
Ouvrez une seconde fenêtre et lancez la console SQL, embarquée directement sur le même dossier de données (sans passer par le réseau) :
miraj-cli.exe --root D:\donneesMIRAJ 1.0.0 Standard - tapez \help pour l'aide, \q pour quitter.
miraj>Vous êtes maintenant dans le mode interactif (REPL) : chaque instruction SQL se termine par un point-virgule, et peut s'écrire sur plusieurs lignes.
3.3 Créer une base#
CREATE DATABASE boutique;
USE boutique;OK, 0 ligne(s) affectée(s)
OK, 0 ligne(s) affectée(s)L'invite affiche désormais le nom de la base courante :
boutique>3.4 Créer une table#
Créons une table de clients, avec une clé primaire auto-incrémentée, une contrainte UNIQUE et une colonne obligatoire :
CREATE TABLE clients (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(80) NOT NULL,
email VARCHAR(120) NOT NULL UNIQUE,
cree_le DATETIME DEFAULT CURRENT_TIMESTAMP
);OK, 0 ligne(s) affectée(s)Créons également une table de commandes, liée aux clients par une clé étrangère :
CREATE TABLE commandes (
id INT AUTO_INCREMENT PRIMARY KEY,
client_id INT NOT NULL,
montant DECIMAL(10,2) NOT NULL,
passee_le DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (client_id) REFERENCES clients(id)
);OK, 0 ligne(s) affectée(s)3.5 Insérer des données#
INSERT INTO clients (nom, email) VALUES
('Amel Kaci', '[email protected]'),
('Youssef Ben Ali', '[email protected]'),
('Claire Dupont', '[email protected]');OK, 3 ligne(s) affectée(s)INSERT INTO commandes (client_id, montant) VALUES
(1, 59.90),
(1, 12.50),
(2, 249.00);OK, 3 ligne(s) affectée(s)Une tentative d'insertion qui viole la contrainte UNIQUE sur email est refusée :
INSERT INTO clients (nom, email) VALUES ('Doublon', '[email protected]');ERREUR 1062 (23000) : Duplicate entry '[email protected]' for key 'email'3.6 Interroger les données : WHERE et ORDER BY#
SELECT id, nom, email FROM clients WHERE nom LIKE '%a%' ORDER BY nom;+----+------------------+----------------------------+
| id | nom | email |
+----+------------------+----------------------------+
| 1 | Amel Kaci | [email protected] |
| 3 | Claire Dupont | [email protected] |
+----+------------------+----------------------------+
2 ligne(s)3.7 Faire une jointure#
Listons les commandes avec le nom du client correspondant, triées par montant décroissant :
SELECT c.nom, o.id AS commande, o.montant
FROM commandes o
JOIN clients c ON c.id = o.client_id
ORDER BY o.montant DESC;+------------------+-----------+---------+
| nom | commande | montant |
+------------------+-----------+---------+
| Youssef Ben Ali | 3 | 249.00 |
| Amel Kaci | 1 | 59.90 |
| Amel Kaci | 2 | 12.50 |
+------------------+-----------+---------+
3 ligne(s)Un agrégat par client, avec GROUP BY :
SELECT c.nom, COUNT(*) AS nb_commandes, SUM(o.montant) AS total
FROM clients c
LEFT JOIN commandes o ON o.client_id = c.id
GROUP BY c.id
ORDER BY total DESC;+------------------+--------------+--------+
| nom | nb_commandes | total |
+------------------+--------------+--------+
| Youssef Ben Ali | 1 | 249.00 |
| Amel Kaci | 2 | 72.40 |
| Claire Dupont | 0 | NULL |
+------------------+--------------+--------+
3 ligne(s)3.8 Créer un index#
Un index accélère les recherches sur une colonne fréquemment filtrée qui n'est ni clé primaire ni UNIQUE :
CREATE INDEX idx_commandes_client ON commandes (client_id);OK, 0 ligne(s) affectée(s)Il se retire avec :
DROP INDEX idx_commandes_client ON commandes;3.9 Voir le schéma#
Lister les tables de la base courante :
SHOW TABLES;+---------------------+
| Tables_in_boutique |
+---------------------+
| clients |
| commandes |
+---------------------+
2 ligne(s)Décrire une table :
DESCRIBE clients;+---------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+-------------------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| nom | varchar(80) | NO | | NULL | |
| email | varchar(120) | NO | UNI | NULL | |
| cree_le | datetime | YES | | CURRENT_TIMESTAMP | |
+---------+--------------+------+-----+-------------------+----------------+
4 ligne(s)Voir la définition complète d'une table :
SHOW CREATE TABLE commandes;Dans la console miraj-cli, les raccourcis \d (sans argument : équivalent à SHOW TABLES ; avec un nom de table : équivalent à DESCRIBE) et \l (équivalent à SHOW DATABASES) évitent de retaper ces instructions ; \help liste toutes les commandes de la console.
3.10 Pour la suite#
Vous savez maintenant créer une base, une table avec contraintes, insérer des données, les interroger avec des jointures et de l'agrégation, indexer et inspecter le schéma. Les chapitres suivants détaillent chaque sujet :
- 4. Types de données pour choisir le bon type de colonne,
- 5. Langage DDL et 6. Langage DML pour l'ensemble des instructions de définition et de manipulation des données,
- 7. Requêtes SELECT pour l'ensemble des possibilités de lecture,
- 9. Transactions et concurrence pour exploiter les transactions dans une application multi-utilisateurs.