Introduction à SQL: Qu'est-ce que SQL?
SQL (Structured Query Langage) est un langage de base de données relationnelle. Il permet:
- La création de base et des tables.
- L'ajout d'enregistrements sous forme de lignes.
- L'interrogation de la base.
- La mise à jour.
- Le changement de structure de la table: ajout, suppression de colonnes.
- La gestion de droits d'utilisateurs de la base.
La version la plus connue sur le Web est MySQL, une implémentation gratuite qui s'utilise notamment avec PHP, mais SQL est aussi le langage de nombreux autres logiciels de base de données parmi lesquelles PostgreSQL, Oracle, DB2, Access et SQL Server...
Les principales commandes sont:
- CONNECT pour se connecter à une base de donnée.
- CREATE pour créer une nouvelle base ou une table.
- INSERT pour ajouter des données.
- SELECT pour faire une requête sur le contenu.
Il est possible en SQL de faire des programmes procéduraux avec des itérations et des conditions.
On peut accéder à une base de données en passant des commandes comme on le fait en PHP, ou avec un logiciel visuel tel que phpMyAdmin fonctionnant sur le serveur ou localement avec XAMPP ainsi qu'avec de nombreux autres logiciel serveurs locaux.
Dans ce tutoriel, on utilisera MySQL avec PHP ainsi que l'interface phpMyAdmin.
Un mot sur l'injection SQL
Malheureusement cette caractéristique qui est de former des phrases pour faire des requêtes peut favoriser si l'on n'y prend pas garde l'injection de code malicieux, une chose dont on doit être prévenu avant même d'écrire la première ligne de code.
Comment fonctionne une injection? On peut l'expliquer par un exemple. L'utilisateur entre un texte dans un formulaire et l'on doit rechercher ce texte dans la base avec la commande SELECT, dont on verra la définition dans le tutoriel.
Supposons que l'utilisateur entre le mot "orange". La commande construite avec les données du formulaire aura cette forme.
SELECT * FROM stock WHERE fruit = orange
Cette ligne cherchera dans le stock de fruit ce qu'il y a comme orange. Maintenant supposons que l'utilisateur entre le texte suivant:
"orange DROP stock".
Voici la nouvelle requête:
SELECT * FROM stock WHERE fruit = orange; DROP stock
Le processeur qui interpréte les commandes en fonction des mots-clés qui se trouvent dans la requête trouvera la commande DROP et effacera la table stock. C'est une injection SQL. Pour prévenir ce genre d'attaque, on mettra toujours les données entre guillemets simples:
SELECT * FROM stock WHERE fruit = '$data'
Les guillemets font que les données sont interprétées comme des données et non comme des commandes.
Un langage universel
Les commandes SQL sont proches du langage naturel, c'était le but du langage dont les principes ont été posés par Edgar F. Codd, et repris par IBM dans SEQUEL (Structured English Query Language), renommé ensuite SQL. Cependant la première version commerciale basée sur SEQUEL l'a été par Relational Software, devenue depuis Oracle.
La norme ISO SQL-92 ou SQL-2 a été définie en 1992 et
est couramment employée.
Cependant de nouvelles normes lui ont succédé, par forcément
implémentées sur tous les logiciels.
La norme ISO SQL:2006 permet de gérer les fichiers XML, notamment importer
des données XML dans une base de donnée ou exporter son contenu
en XML.
Ce sont surtout ces normes qui font la différence. Quel que soit le logiciel utilisé, MySQL (ou MariaDB), PostgreSQL ou Oracle, ou même les gestionnaires dit NoSQL comme Cassandra, on retrouvera la même syntaxe, avec des différences mineures.