Fondamentaux

SQL

SQL est le langage standard pour interagir avec les bases de données relationnelles. Beaucoup d'applications web l'utilisent pour stocker et consulter leurs données.


Base relationnelle

Une base relationnelle est composée de tables.

CustomerIDCustomerNameEmail
1Alicealice@example.com
2Bobbob@example.com

Une table contient des colonnes et des lignes.

SGBD courants :

  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • SQLite

Un schéma décrit l'organisation des tables, les colonnes, les types, les contraintes et les relations entre données.


Types courants

TypeDescription
INTNombre entier
FLOATNombre décimal
TEXTTexte
DATEDate
NULLValeur inconnue ou absente
BOOLEANVrai ou faux
UUIDIdentifiant unique

Clés et relations

Une clé primaire identifie une ligne de façon unique. Une clé étrangère relie une table à une autre.

Users
  id
  email

Orders
  id
  user_id → Users.id
  total

Ces relations permettent de représenter des comptes, commandes, rôles, permissions ou journaux.


Commandes essentielles

Lire :

SELECT * FROM Customers;
SELECT CustomerName, Email FROM Customers;

Ajouter :

INSERT INTO Customers
(CustomerName, Email)
VALUES
('Alice', 'alice@email.com');

Modifier :

UPDATE Customers
SET Email = 'new@email.com'
WHERE CustomerName = 'Alice';

Supprimer :

DELETE FROM Customers
WHERE CustomerName = 'Alice';

Filtrer et trier :

SELECT *
FROM Customers
WHERE Email LIKE '%@example.com'
ORDER BY CustomerName ASC;

Attention

Sans clause WHERE, un UPDATE ou DELETE peut impacter toute la table.


Jointures

Une jointure permet de croiser plusieurs tables.

SELECT Customers.CustomerName, Orders.total
FROM Customers
JOIN Orders ON Orders.customer_id = Customers.CustomerID;

C'est indispensable pour comprendre comment une application relie utilisateurs, rôles, sessions, achats ou droits d'accès.


Transactions

Une transaction regroupe plusieurs opérations qui doivent réussir ou échouer ensemble.

BEGIN;
UPDATE Accounts SET balance = balance - 100 WHERE id = 1;
UPDATE Accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Si une erreur arrive avant COMMIT, la base peut annuler les changements avec ROLLBACK.


SQL et cybersécurité

Comprendre SQL aide à comprendre les injections SQL. Une SQLi apparaît quand une application laisse des données utilisateur modifier une requête SQL.

La prévention repose notamment sur :

  • requêtes préparées
  • validation des entrées
  • moindre privilège côté base
  • messages d'erreur peu bavards
  • comptes applicatifs séparés
  • sauvegardes testées
  • journalisation des actions sensibles

Exemple de mauvaise idée

Construire une requête avec une valeur utilisateur directement concaténée est dangereux.

const query = "SELECT * FROM users WHERE email = '" + email + "'"

La bonne approche consiste à utiliser des paramètres préparés avec la bibliothèque ou l'ORM choisi.

À retenir

SQL sert à lire et modifier des données critiques. En sécurité, le sujet n'est pas seulement l'injection SQL, mais aussi les droits, les sauvegardes, les journaux et la qualité du modèle de données.

Précédent
JavaScript