Préambule
Objectif
Dans ce tutoriel, nous apprendrons à créer et gérer une base de donnée MySQL avec phpMyAdmin.
Nous y verrons comment créer un utilisateur et lui accorder les droits d'accès à une base de donnée.
Nous aborderons la création de tables et quels sont les principaux types de donnée disponible avec MySQL.
Enfin nous verrons comment rédiger des requètes SQL pour manipuler les données de la base en vu d'une utilisation dans PHP.
Prérequis
Vous avez installé un serveur web local avec MySQL et phpMyAdmin (type Wamp sur windows ou Mamp sur Mac).
Vous devez avoir une idée du principe de client / serveur
http://www.mamp.info : Un pack Serveur web / Mysql / phpMyAdmin pour Mac OSX
http://www.wampserver.com : La même chose mais pour Windows
Terminologie
Avant d'entrer dans le vif du sujet, il est important de faire un petit point sur la terminologie utilisée.
Serveur de donnée (ou serveur MySQL)
Le serveur de donnée est un programme (un deamon) qui va gérer des bases des données.
MySQL est un serveur de donnée, il est parmis les plus populaire et est présent sur la grande majoritée des hébergements de site.
MySQL est un projet open-source, libre et gratuit. Plus d'infos
Si vous avez installé un serveur web local avec des "packs" tel que Mamp, Wamp, easyphp, etc... Vous avez sans le savoir installé un serveur MySQL
Quand nous commençerons à communiquer avec MySQL depuis PHP, nous nous adresserons au serveur MySQL par son petit nom (généralement "localhost", en passant par le port que se réserve (MySQL utilise par défaut le port 3606).
Le boulot d'un serveur de données, c'est de stoquer des données. (d'ou son nom). Seulement voilà, on est rarement tout seul à utiliser son propre serveur. Sur les hébérgements mutualisés, plusieurs centaines de milliers d'utilisateurs utilisent un même serveur de données, chaqu'un des ces utilisateur dispose de une ou plusieurs base de données...
Comme on ne veut pas que n'importe qui puisse se connecter au serveur et allé patouillé partout, les administrateurs des serveurs définissent des utilisateurs. Du coup quand on accède à un serveur de données, ce dernier nous demande de nous identifié avec un identifiant et un mot de passe.
Quand vous loué un espace web chez un hébergeur, il vous fournis généralement des informations de connection. A noter que les hébérgeurs ont une très grande quantité de serveur de données, et donc le nom de votre serveur MySQL ne sera probablement pas "localhost".
Donc pour accèder à un serveur de données, voici les informations qui vous seront généralement demandées :
- Identifiant (ou login)
- Mot de passe
- adresse du serveur (souvent localhost)
- le port (souvent 3606)
Dans le cas de W/Mamp, le serveur de données sera MySQL, l'adresse sur serveur est localhost.
Pour information, il existe d'autre serveur de base de donnée :
- postgresql
- Oracle
- SQLserver
- Etc...
Base de donnée
Une fois connecté au serveur de données avec notre identifiant et notre mot de passe, nous avons accès aux bases de données. Mais c'est quoi une base de données ???
En informatique, une base de données (Abr. : « BD » ou « BDD ») est un lot d'informations stockées dans un dispositif informatique. Les technologies existantes permettent d'organiser et de structurer la base de données de manière à pouvoir facilement manipuler le contenu et stocker efficacement de très grandes quantités d'informations.
Pour faire simple, une base de donnée est une sorte de classeur qui va contenir des tableaux de données. Vous pouvez créer autant de tableaux que vous voulez, et vous pouvez également relier certains tableaux entre eux (On parle souvent de Base de données relationnelle, c'est pas parcequ'elles sont sympas ou diplomates, c'est parceque'elle permet de créer des relations).
Les tableaux d'une base de données sont appellés des tables. En pratique, si vous avez un site avec des actualités, il a de grande chance qu'il y ai une table actualité ou news dans la base de données où sont stoquées les informations. Tables, champs, enregistrements
Nous avons vu juste avant que pour avoir accès au serveur, nous devions avoir un compte utilisateur qui a accés au serveur, un utilisateur peut être l'heureux propriétaire de plusieurs base de données. Et selon les droits que lui accorde le serveur, il pourra en créer, en lire certaines, et écrire dans d'autres. Dans la majorité des cas, les hébergeurs fournissent au moins une base de données, ensuite c'est selon la qualités de votre espace web.
Si vous avez installé un serveur web local type "pack" (W/MAMP), vous êtes de toute façon le big boss, vous pouvez par conséquent créer des utilisateurs, des bases de données, et tout péter si ça vous chante (ou si vous ne faites pas attention).
Dans les serveur locaux comme W/Mamp, vous disposez par défaut d'un utilisateur tout puissant appellé root, il a tout les droits sur tout.
Chez les hébergeurs (comme OVH), vous avez un utilisateur MySQL avec le même login que celui que vous utilisez pour l'accès FTP. Pour avoir accès aux bases de données, vous devez au préalable allé en créé une dans l'interface d'administration. Ce genre d'hébergeur vous fournira le nom du serveur où sera installé la base de donnée ainsi qu'une adresse phpMyAdmin pour administrer cette base.
Table et champs
C'est la partie qui va nous interesser. Comme expliqué plus haut, les tables sont des tableaux de données.
Comme dans une feuille de calcule type OpenOffice ou Exel (beurk), on trouve des colonnes (que l'on appelle des champs). Dans une table où nous voudrions enregistrer des contacts, nous pourrions avoir par exemple un champ pour le nom, un champ pour le prénom et un champ pour l'email.
Ces tables sont remplies de lignes d'informations (ça c'est des enregistrements).
Mais dans une base de données c'est pas le boxon comme dans un fichier Exel, lors de la création d'une table, vous allez choisir le type d'information que vous attendez dans chaque champs (Chaque champs dispose d'un type), comme ça si un petit malin essais de mettre le texte "toto" dans le champs date de naissance, le serveur de donnée refusera d'enregistrer la ligne et retournera une erreur : "Non non, moi localhost, je refuse d'enregistrer une chaine de caractère "toto" dans le champs ou il doit y avoir une date !" Ce genre de contrôle (ou restrinction) s'appelle une contrainte de type, il existe plein de type de contrainte.
Requètes
C'est ce qui permet de communiquer avec un serveur de données. Chaque action passe par une demande précise que l'on peut regrouper en 5 catégories :
- L'interrogation (SELECT)
- L'ajout (INSERT)
- La mise à jour(UPDATE)
- La suppression(DELETE)
- L'administration(le reste).
Si vous voulez Mettre à jour une information et en ajouter une, vous ferez 2 requètes. Les requètes sont donc des instructions assez simples qui vont demander au serveur de faire quelques chose avec les données. Par contre MySQL (comme beaucoup de serveur de données) ne comprend que le langage SQL
langage SQL
Si vous communiquez avec une personne en français, mais que cette personne ne parle pas le français, il vous sera impossible de vous faire comprendre. Pour les serveurs de données c'est la même chose.
Pour communiquer avec un serveur MySQL, on utilise le langage SQL. C'est un langage standard que l'on utilise également pour communiquer avec les serveurs de données postgresql.
Le langage SQL nous permettra par exemple de demander tous les enregistrements de la table qui contiens les contacts ordonnés sur la colonne nom.
phpMyAdmin
Pour communiquer avec le serveur MySQL, on utilise (quand on est un geek acharné) un client MySQL, c'est un petit programme en ligne de commande dans lequel on saisi des requètes à la main pour les envoyer au serveur... C'est un apprentissage enrichissant mais qui reste long est fastidieux dans on débute.
Nous nous utiliserons phpMyAdmin, c'est une interface visuelle développée avec PHP qui permet de façon simple de gérer des bases de données. Ce programme est installé automatiquement dans les packs W/Mamp et sur les hébérgements web traditionnel.
Pour les hébérgements online, votre hébergeur vous fourniera normalement un identifiant et un mot de passe MySQL, ainsi que l'URL d'accès à phpMyAdmin, dans la plus par des cas il vous sera également préciser le nom du serveur MySQL.
phpMyAdmin est accessible depuis votre naviguateur (W/Mamp propose un raccourcis dans leur page d'accueil respective). normalement vous devriez tomber sur une page de ce genre :

Le vollet de gauche affiche les base de données présentent sur le serveur. Au centre c'est la page d'accueil.
Attention : Les bases de données information_schema et mysql sont des bases de données créée au moment de l'installation de MySQL. Ce ne sont PAS des bases de données d'exemples, elles sont utilisées par le système, les supprimer rendra MySQL inutilisable !!!
Gérer les utilisateurs
Comme expliqué en préambule, l'accès au serveur de données est régulé par un système d'utilisateur classique avec identifiant et mot de passe. Dans les Packs W/Mamp, vous êtres connecté au serveur avec le superutilisateur root.
En situation réél (hébérgement mutualisé par exemple), Vous n'aurez généralement pas le droit de créer directement des base de données. Cela se fait souvent via une interface client avec des limitations sur le nombre de bases que l'on peut créer et leurs poids.
Créer un utilisateur
Nous allons, dans le cadre de notre projet, créer un utilisateur mendez. Pour cela, dans la partie centrale de phpMyAdmin, cliquez sur privilèges (dans les sorte d'ongets en haut de la partie centrale).
La liste des utilisateurs référencés par le serveur s'affiche (vous ne devriez avoir que quelques lignes).
Clique sur Ajouter un utilisateur
.
Un formulaire apparait où l'on va renseigner les informations pour notre utilisateur :
- Nom d'utilisateur : mendez (en minuscule)
- serveur : local (localhost)
- Mot de passe : azerty
Puis cliquez sur Executer
tout en bas de la page.
Nous venons de créer un utilisateur mendez, pour le moment cet utilisateur a les droit de se connecter au serveur, mais il ne dispose d'aucun droit d'accès à aucune base de données.
Nous allons lui créer une base de données et ensuite lui accorder tous les droits dessus.
Revenez sur l'accueil de phpMyAdmin (en cliquant le sur logo dans le vollet de gauche ou sur la petite maison)
Au centre, dans le champ créer une base de données
entrez le nom de la base de données : mendez_db, selectionnez l'encodage de caractère utf8_general_cs, en cliquer sur Créer
.
Nous venons de créer notre permière base de données :)
Gestion des privilèges
Maintenant nous allons délivrer à Monsieur Mendez les autorisations pour allez faire ce qu'il veut dans la base de données. Retourner dans la partie privilèges, dans la liste des utilisateurs, et cliquez sur l'icône de modification.
Nous arrivons dans l'écran de gestion des privilèges, défiler jusqu'à trouver l'encadré privilèges spécifiques à une base de données
, selectionnez la base de données mendez_db, l'écran se rafraichis et vous propose un serie de checkbox, selectionnez les toutes (tous les droits). Cliquez sur executer
Voilà, l'utilisateur mendez a maintenant tout les droits dans la base de données mendez_db. Globalement la gestion des privilèges se résume à ça. Créer des utilisateurs, et leurs accorder des droits plus ou moins limités à des bases de données.
Il est important de prendre l'habitude de créer un utilisateur et une base de donnée de cette façon dès que vous commencez à travailler sur un site. Vous aurez généralement un utilisateur avec tout les droits sur une base de données pour chaque site. Cela vous prémunis d'erreur de manipulation génante (comme supprimer des bases de données par mégarde). En cas de problème, l'onde de choc sera contenu sur un seul site.
Créer des tables
Dans le vollet de gauche, cliquez sur la base de données mendez_db. L'interface de phpMyAdmin se rafraichis, le vollet de gauche va contenir maintenant la liste des tables de la base de données mendez_db (et une combo pour changer de base de données).
Pour créer une table c'est très simple, renseigner le champ Créer une nouvelle table
au centre, nous appellerons notre première table createurs (sans accents).
Quand vous faites Executer
, l'écran se rafraichis, et c'est précisement là que ça se corse :P
Des champs et des types
Comme nous l'avons vu dans le préambule, une table est composés de champs, et chaque champs doit être définit avec un type bien précis. Nous allons créer une table pour stoquer des personnalités (des créateurs), nous allons avoir besoin de créer plusieurs champs :
- Nom
- Prénom
- Date de naissance
- Date de mort
- Nationnalité
- Pseudonyme
- Biographie (rapide)
Nous allons devoir maintenant voir quels types de données nous allons utiliser pour chaqu'une de ces valeurs. Je vais donc vous présenter les différents types de champs disponibles dans MySQL (nous ne verrons que les principaux types).
| Type (mot clef SQL) | paramètre(s) | Utilisation |
|---|---|---|
| Texte / Chaines | ||
| VARCHAR | - taille maximum de la chaine (0 à 255 caractères) | Des chaines de caractères courtes |
| TEXT | aucun | Des gros pavès de texte |
| ENUM | - Liste des valeurs entre guillemets séparées par des virgules | Derrière le côté pratique se cache au final un type rarement utilisé |
| Numérique | ||
| INT / BIGINT | - Taille maximum (en nombre de chiffre) | Permet de stoquer des nombres entiers, sert généralement à stocker les CLEF PRIMAIRES (on verra ça un peut plus loin) |
| DECIMAL | - format sous la forme (nombre de chiffre, décimal) | Sert généralement à stoquer les valeurs monnaitaires |
| Date | ||
| DATE | - aucun | Une date au format SQL : YYYY-MM-DD |
| DATETIME | - aucun | Une date (avec l'heure) au format SQL : YYYY-MM-DD HH-II-SS |
| TIME | -aucun | Une heure au format SQL : HH-II-SS |
Dans notre cas nous utiliserons ces types :
- Nom : VARCHAR(100)
- Prénom : VARCHAR(100)
- Date de naissance : DATE
- Date de mort : DATE
- Nationnalité : VARCHAR(2) Nous utiliserons le code ISO du pays d'origine, fr pour la france, ir pour l'Irlande, etc...
- Pseudonyme : VARCHAR(100)
- Biographie : TEXT
Dans la configuration des types ces informations sont suffisantes, nous verrons par la suite comment configurer les champs de façon plus fine.
Nommage des champs
Vous allez commencer à être habitué, mais MySQL n'échappe pas à la règle du Je-nomme-pas-n'importe-comment, a savoir que vous ne pouvez pas utiliser des caractères accentués ou d'espaces dans le nom des champs. Seul l'underscore, les chiffres et les caractères non-accentués sont permis.
Attention : On peut utiliser des noms de tables/champs qui contiennent des espaces ou des accents, mais cela est souvent la source d'erreur au moment des requètes.
Gardez à l'esprit que vous allez devoir saisir à la main le nom des champs, donc éviter de nommer le champ titre come ça : titre_de_l_actualite...
Pour notre projet voici un exemple de nommage :
- Nom : nom
- Prénom : prenom
- Date de naissance : date_naiss
- Date de mort : date_mort
- Nationnalité : nationalite
- Pseudonyme : pseudo
- Biographie : bio
Nous n'avons pas appelé la date de naissance date (tout court) car DATE est un mot-clef réservé en SQL qui permet de gérer un type de donnés (les Dates).
MySQL (et phpMyAdmin) permet de gérer beaucoup de chose lors de la création : La valeur par défaut, l'indexation, pouvoir rendre une valeur unique, l'auto-incrémentation.
Options des champs
Null
Voilà bien une valeur étrange, en faites elle très simple à cerner, une valeur NULL indique simplement Aucune valeur renseigner. Par exemple une chaine de caractère vide est malgrés tout une chaine... Une chaine NULL c'est l'absence totale de valeur (même pas une chaine vide).
Dans notre cas nous utiliserons la valeur NULL dans le champs date_mort si le créateurs est encore vivant.
Dans phpMyAdmin, par défaut les valeurs NULL ne sont pas admises, vous devez pensez à cocher l'option null pour les autoriser.
Valeur par défaut
L'effet premier des valeurs par défaut, c'est de venir peupler les enregistrements lorsque vous ajouter un champ à la table. Dans phpMyAdmin, cela pré-rempli le champ de saisi.
Dans notre cas nous utiliserons la valeur par défaut "fr" pour la nationnalité (car je suis un gros chauvin).
Unique
Cela ajoute une régle pour les données d'un champ qui ne permet pas d'avoir 2 fois la même valeur dans ce champ. Par exemple une table avec des comptes utilisateur pourrait avoir comme champ unique le login choisi par les utilisateur.
Dans notre cas nous pourrions nous dire que le nom est unique ? Non, rien empèche 2 créateurs d'avoir le même nom, (ou le même nom et le même prénom).
Nous n'utiliserons pas de valeurs uniques dans notre cas.
Conception
L'étape où l'on conçoit la base de données est plus importante qu'elle n'y parait, le choix des types de données, dans champs créés est fondamentale et ne doit pas être fait à la légère. Les débutants font souvent l'erreur de créer les bases de données à l'arache, puis ils les corrigent au grès des besoin de l'application... Cela tiendra un temps sur des petites applications...
Pour concevoir une base de données efficace, commencez toujours pas bien identifié les données dont vous allez avoir besoin, pensez au données visible (côté publique et côté administration), essayer de savoir si les données seront utilisées pour faire des statistiques, des calcules, etc... Si ces données vont être amené à changer et à quel fréquence. Tenez compte également de l'évolution potentielle de l'utilisation de ces données...
La phase d'identification des besoins (en terme de donnée) s'appelle la modélisation. Une fois le besoin identifié de façon précise, ON NE CRE PAS LA BASE.
Ensuite vous devez identifier les scénarios d'utilisation de ces données. Imaginer les différentes écrans, les listes, formulaires, qui a accès à quoi, etc... Certains scénarios peuvent vous orienter sur une conception de base de données différente pour faciliter le développement ou simlifier l'accès à certaines informations dans certaines vues.
Enfin, vous concevez la base de données. Mais généralement à ce moment, le gros du boulot de conception est derrière vous (quand c'est bien fait).
Manupuler les enregistrements
Via phpMyAdmin, la manipulation des enregistrements deviens d'une simplicité enfantine. Cependant pour pouvoir manipuler les enregistrements avec PHP, vous allez devoir savoir faire des requètes en utilisant SQL.
Pour comprendre les requètes, rien de mieux que de regarder celle que vous affiche phpMyAdmin à chaques opérations.
Ajouter (INSERT INTO)
Pour ajouter des enregistrements, on utilise une requète INSERT.
Pour executer des requètes depuis phpMyAdmin, selectionnez la base de données dans le menu de gauche, puis cliquez sur SQL dans les onglets de la partie centrale.
Il existe plusieurs méthodes pour ajouter des enregistrement directement avec des requètes.
D'abort en remplissant tout les champs :
INSERT INTO actualites VALUES( 'Deleuze', 'Gilles', '1925-01-18', '1995-11-04', 'fr', 'Gilou', 'Philosophe français' );
Les retours à la lignes ne servent qu'à votre confort de lecture.
On peut également faire des INSERT en spécifiant les champs à peupler :
INSERT INTO createurs(nom, prenom, date_naisse, nationnalite)
VALUES('Easton Ellis', 'Bret', '1964-03-07', 'us');
Ce type de requètes est très utilisé en combinaison avec les valeurs par défaut. Dans ce cas de figure, tout les champs ayant été définit avec des valeurs par défaut et où rien n'est remplis prendrons cette valeur.
Import / Export de base de données
Avant d'allé plus loin, nous allons voir comment exporter la structure d'un base de données et les données de cette base. Nous verrons également comment importer la structure et les données.
Cette tâche vous sera très utile pour faire des sauvegardes de vos base de données (structure et/ou données). Mais également pour faire une réstauration de base de données, ou enfin, pour un import complet des tables d'une base de données dans une autre (lors de la mise en ligne du site par exemple).
Export
On utilise très souvent les export de base de données : Au moment de la création d'un site pour pouvoir faire des sauvegardes des données par exemple, mais également quand le site est en ligne (les fameux backup de site). Les développeurs Web parlent souvent de Dump de la base
.
Un export consite à créer une serie de requètes qui va se charger de créer les tables de la base de données, puis les requètes necessaires pour remplir ces tables à l'identiques. En fait, un fichier d'export ne contient que des requètes SQL...
Dans phpMyAdmin, cliquez sur votre base de données, puis dans les onglets au centre, cliquez sur exporter
. Un formulaire pour paramétrer l'export s'affiche :

Dans l'encart Exporter à gauche, vous pouvez selectionner la liste des tables à exporter ainsi que le format (pour ma part je fais toujours les exports au format SQL.
Dans la partie droite, vous avez les options d'exportation. Ces options sont divisées en 2 parties, les options d'export de la structure et les options d'export des données.
Dans la pratique, vous aurez besoin d'exporter la base pour faire une sauvegarde de votre stucture et des données pour pouvoir soit : les restaurer ou les ajouter à une base de données différente. C'est pourquoi je coche toujours l'option : Ajouter DROPTABLE
(Cette options va supprimer une table du même nom si elle existe avant d'ajouter la table avec ces données.
Sans l'option DROP TABLE, vous aurez une erreur lors de l'import si une table du même nom existe déjà.
La dernière option transmettre va vous permettre de choisir le format de l'export, coché, une fenètre de téléchargement s'affichera pour télécharger le fichier SQL (Compressé si vous avez choisi un format de compression). Pour notre exemple choisissez transmettre, et concervez le fichier obtenu.
Si vous exportez une base de données de petite taille (de quelques kilos octets à 1/2 megas), vous n'êtes pas obligé de choisir un format de compression, mais par la suite, quand vous commencez à avoir une base de données de plusieurs Megas, vous devrez choisir un format de compression.
Import
L'import est encore plus simple. Pour notre cas d'utilisation, allez sur l'accueil de phpMyAdmin, et créer une nouvelle base de données, nous allons importer dans cette nouvelle base de données les tables que nous venons de sauvegarder.
Cliquez sur cette nouvelle table dans le menu à gauche, puis dans la partie centrale, cliquer sur l'onglet exporter
. Faites parcourir, selectionnez le fichier que nous venons de télécharger, puis cliquer sur Executer
.
C'est fini.
Vous pouvez réaliser la même opértion dans une base de données ayant déjà des tables. Les tables déjà présentent ne seront pas supprimées (sauf si elles portent le même nom.
Conseil
Si vous êtes ammené à travailler sur des base de données importantes (a partir de 40 tables et quelques centaines de milliers d'enregistrements). Le système d'export de phpMyAdmin commence à avoir du mal (cela viens viens de la durée d'execution de l'export), dans ce cas vous devrez vous pencer sur le client MySQL "normal" (Vous savez, celui en ligne de commande :), ce client propose des commande de dump très performante qui vons réaliser des dumps de plusieurs megas en quelques secondes.
Selectionner des enregistrements (SELECT)
Maintenant que nous avons appris à peupler notre table, nous allons apprendre à selectionner des enregistrements.
Pour pouvoir tester les requètes qui vont suivre, vous pouvez télécharger le fichier qui suit, il contiend une table createurs
pré-remplie.
http://exemples.jacksay.com/PHP/PDO/createurs.sql : Export de la table créateurs avec quelques enregistrements.
Selectionner des champs
La première requète est simplissime :
SELECT * FROM createurs;
Le mot-clef SELECT indique que nous voulons selectionner des entregistrement, ensuite le caractère * indique que vous allons prendre tous les champs de la table, enfin le mots-clef FROM précise dans quel tables nous voulons faire cette selection, il est suivi du nom de la table.
Cette requètes pourrait être églement rédigée de cette façon :
SELECT nom, prenom, date_naiss, date_mort, nationnalite, pseudo, bio FROM createurs
Dans la deuxième requète, nous précisons la liste des champs à récupérer séparés par des virgules. Nous pourrions ainsi limiter les champs affichés sur le nom et le prénom :
SELECT nom, prenom FROM createurs
La selection de certains champs uniquement a pour but d'optimiser les requètes, en effet, moins vous selectionnez de champs, plus la requète sera rapide à éxécuter.
Lorsque vous interrogerez des données, vous avez rarement besoin des toutes les données, c'est pourquoi il est utile de filtrer les résultats.
Filtrer avec WHERE
Pour filtrer les résultâts, on utilise la clause WHERE.
le syntaxe se présente sous cette forme :
-- Première méthode SELECT champs1, champ2, champN FROM la_table WHERE champs = valeur -- Fonctionne également avec SELECT * FROM la_table WHERE champs = valeur;
Si nous voulons afficher la liste des créateurs français, nous utiliserons :
-- Selectionne les créateurs français SELECT * FROM createurs WHERE nationalite = 'fr'
Les clauses WHERE peuvent être appliquées à des champs qui ne figurent pas dans la liste de ceux sélectionnés.
-- Selectionne les créateurs français( nom et prénom ) SELECT nom, prenom FROM createurs WHERE nationalite = 'fr'
Cumuler les clauses avec AND / OR
Vous pouvez également combiner les clauses WHERE avec AND (et) ou OR (ou)
-- AND SELECT champs1 FROM la_table WHERE champ2 = valeur AND champ3 = valeur -- OR SELECT champs1 FROM la_table WHERE champ2 = valeur OR champ3 = valeur
Exemple :
-- Selectionne les créateurs français dont le prénom est jacques SELECT nom, prenom FROM createurs WHERE nationalite = 'fr' AND prenom = 'jacques' -- Selectionne les créateurs anglais ou irlandais SELECT nom, prenom, nationalite FROM createurs WHERE nationalite = 'uk' OR nationalite = "ir"
Vous pouvez écrire vos requètes sur plusieurs lignes, cela vous aidera en terme lisibilité.
Les requètes sur les chaines ne sont pas sensibles à la CASE, la clause WHERE nationalite='fr' retournera les même résultats que WHERE nationalite='FR' !!!
Opérateur < > <= >=
On peut également utiliser les opérateurs supérieur et inférieur pour affiner les résultats :
-- Champ inférieur à valeur SELECT * FROM la_table WHERE champ_date < 'valeur';
Les opérateurs supérieur et inférieurs semble être consacré uniquement à la manipulation des nombres... Et bien non, vous pouvez l'utiliser avec tous les types de données :
-- Retourne les créateurs nés après le 1 janvier 1900 SELECT nom, prenom, date_naiss FROM createurs WHERE nationalite > '1900-01-01';
ou encore :
-- Retourne les créateurs dont le nom commence par un B SELECT nom, prenom, date_naiss FROM createurs WHERE nom > 'B' AND nom < 'C';
Notez que dans cette dernière requète, un créateurs dont le nom serait B ne serait pas présent dans le jeu de résultat...
Ressemble avec LIKE
La requète précédente servait à retourner les créateurs commençant par la lettre B, dans ce cas de figure, l'opérateur LIKE aurait été plus efficace.
Voici sa syntaxe :
-- Champ1 commence par la lettre A SELECT * FROM la_table WHERE champ1 LIKE 'A%'; -- le champ nom commence par un B SELECT nom, prenom, date_naiss FROM createurs WHERE nom LIKE 'B%'; -- Créateurs nés en 1925 SELECT nom, prenom, date_naiss FROM createurs WHERE date_naiss LIKE '1925-%'; -- Créateur nés le 18(N'importe quel mois/années) SELECT nom, prenom, date_naiss FROM createurs WHERE date_naiss LIKE '%-18';
Opérateur !=
L'opérateur != (différent) va faire l'inverse de ce que fait l'opérateur d'égalité (=).
-- Selectionne les créateurs qui ne s'appellent pas 'william' SELECT * FROM createurs WHERE prenom != 'william';
Opérateur <=> et <>
Si vous avez cherché à afficher les créateurs vivants (date_mort vaut NULL) avec cette requète :
-- Cette requète ne fonctionne pas SELECT * FROM createurs WHERE date_mort = NULL;
Si vous voulez faire des test type égale NULL ou différent de NULL, il existe 2 opérateurs spécifiques pour ce genre de test : <=> et <>
-- Cette requète affiche les créateurs vivants SELECT * FROM createurs WHERE date_mort <=> NULL; -- Et celle là les morts SELECT * FROM createurs WHERE date_mort <> NULL;
Ordonner avec ORDER BY
Vous pouvez également ordonner les résultats en utilisant ORDER BY, en voici la syntaxe, les ORDER BY interviennent en complément des WHERE :
-- ORDER BY DESCENDANT SELECT champs1 FROM la_table ORDER BY champ2 DESC, champ1 DESC -- ORDER BY ASCENDANT SELECT champs1 FROM la_table WHERE champ2 = valeur ORDER BY champs1 ASC, champs2 ASC
Notez que vous pouvez croiser l'utilisation de ASC/DESC :
-- ORDER BY CROISE SELECT champs1 FROM la_table ORDER BY champ2 ASC, champ1 DESC
Dans notre cas elle pourrait être utilisé pour afficher les créateurs par ordre alphabétique sur le nom et le prénom :
// Affiche les créateurs ordonnés par nom SELECT * FROM `createurs` ORDER BY nom ASC, prenom ASC // Affiche les créateurs français par date // du plus jeune au plus vieux SELECT nom, prenom FROM createurs WHERE nationalite = 'FR' ORDER BY date_naiss DESC;
Limiter le nombre de résultât avec LIMIT
L'instruction LIMIT sert à limiter le nombre d'enregistrement livré par la requète.
-- Limite simple : Les 10 premiers résultats SELECT * FROM createurs LIMIT 10
Cette instruction peut être ajoutée à tout ce que nous avons déjà vu :
-- Retourne les 10 plus jeunes créateurs français SELECT nom, prenom, date_naiss, nationalite FROM createurs WHERE nationalite = 'FR' ORDER BY date_naiss DESC, nom ASC, prenom ASC LIMIT 10
Notez que phpMyAdmin ajoute automatiquement une instruction LIMIT si vous n'en spécifier pas, cela évite un potentiel plantage du navigateur lors du rendu des résultats... imaginez la tête de votre navigateur s'il devait afficher plusieurs centaines de milliers de résultats dans la même page...
L'instruction LIMIT permet donc de paginer les résultats (les liste des résultats commence à 0), pour afficher les 10 premiers résultats, vous utiliserez LIMIT 0, 10. Pour la page suivante LIMIT 10, 10, etc...
-- Cette limite est utilisée pour les systèmes de pagination -- Voici les requètes pour les 3 premières page (10 résultats / page) -- page 1 SELECT * FROM createurs ORDER BY nom LIMIT 0,10 -- page 2 SELECT * FROM createurs ORDER BY nom LIMIT 10,10 -- page 3 SELECT * FROM createurs ORDER BY nom LIMIT 20,10
Modification (UPDATE)
Les requètes de modification sont un peu particulières. Pour le constater assurez vous d'avoir plusieurs enregistrements dans la table createurs avant de tester cette requète :
-- Met à jour le champ nom dans la table createurs UPDATE createurs SET nom = 'Norbert'
Si vous afficher les enregistrements, vous pourrez constater que tous les enregistrements ont été modifié... Ca n'est pas forcement ce que nous voulons faire.
Pour pouvoir modifier (et ça sera la même chose pour la suppression), nous allons devoir utiliser une clause WHERE pour limiter la mise à jour sur un enregistrement précis.
Mais là aussi l'effet peut être involontaire :
-- Met à jour la fiche de Francis Bacon UPDATE createurs SET bio = 'Peintre anglais' WHERE nom='Bacon' AND prenom='Francis';
Maleureusement, nous venons de transformer Francis Bacon (le penseur du 15ème sciècle) en peintre... Nous aurions pu ajouter une clause WHERE plus précise en jouant sur la date de naissance par exemple, mais ces données ne sont pas sûr où peuvent être incomplète.
Pour résoudre le problème (idem pour les DELETE), nous sécuriserons les UPDATE en nous appuyant sur une clef primaire que nous apprendrons à créer après la partie suivante.
Il n'est pas rare de sécuriser les UPDATE et les DELETE en ajoutant une LIMIT 1 en plus du WHERE
Suppression (DELETE)
La suppression est la requète la plus simple :
DELETE FROM table
De faites elle fonctionne généralement avec la clause WHERE pour limiter son action sur un champ précis.
Supposons que nous voulions gagner la guerre de 100 ans en une requète :
-- Supprime tous les anglais :P DELETE FROM createurs WHERE nationalite='uk'
Comme pour les UPDATE, tout repose sur la clause WHERE.
Voyons maintenant comment créer la fameuse clef primaire.
Clef primaire (PRIMARY)
Lors des UPDATE et des DELETE, nous avons vu que la clause WHERE était indispensable pour nous garantir que la suppression s'applique bien à un enreistrement précis, mais la méthode a ces limites (souvenez vous de notre pauvre Francis Bacon).
Dans une tout autre mesure, l'écriture de clause WHERE incluant un grand nombre de champs peut devenir une perte de temps énorme (sans compter les risques d'erreur).
C'est là qu'interviennent les clefs primaires.
Les clefs primaires sont des identifiants unique (un nombre). Chaque fois que vous créez des enregistrements, ce nombre est incrémenté automatiquement (option AUTO_INCREMENT). De cette façon, chaque enregistrement dispose d'un numéro unique.
Ainsi pour réaliser des suppressions ou des modifications sur un enregistrement, la clause where deviens très facile à renseigner :
UPDATE actualites SET titre = 'Titre modifié' WHERE id=7;
Les champs d'indentifiants unique (les clefs primaires) sont nommés par convention id (ou en majuscule ID).
Les champs de type clef primaires sont des nombres entiers INT(7) par exemple (permet de créer 9 999 999 enregistrements :P).
Les clef primaires ont un index de type PRIMARY (ça les rend unique et le serveur MySQL va alloué des ressources pour accélérer l'accès à ces champs).
Pour ajouter ce champ à notre table createurs, vous pouvez passer par phpMyAdmin, dans l'onglet structure, en dessous de la liste des champs, un petit formulaire permet d'ajouter des champs à la structure existante, choisissez en début de table
. Pensez à selectionner PRIMARY dans la combo index et à cocher A.I (AUTO_INCREMENT).
Conclusion
Voilà, cette petite introduction à MySQL / SQL est terminée, nous y avons aborder des notions essentielles pour débuter dans la créations et l'utilisation de base de données dans vos projets Web.
D'autre tutoriaux viendrons compléter celui là où il sera question de jointures (liaison entre plusieurs tables) et également question de fonctions (MySQL regorge de fonction utilitaires pour manipuler les dates, les chaines, les nombres, faire des test).
Infos
Dans ce tutoriel, vous apprendrez les bases pour gérer et créer des bases de données MySQL avec l'aide de phpMyAdmin, vous aborderez égalements des rudiments de SQL dans l'optique d'une utilisation de MySQL avec PHP.
- Niveau : Débutant
- Catégorie : PHP
- Publié le : 20 février 2011
- Dernière Mise à jour : 20 février 2011
- Notions abordées :