samedi 27 octobre 2012

Apprendre les bases de données MySQL

MySQL est dérivé de SQL (Structured Query Language), en français, langage de requête structurée. Concrètement, SQL permet de dialoguer avec une base de données en langage presque courant, étant entendu que le langage dont il est question ici est l'anglais...

SQL s'utilise surtout via une fenêtre de commande, MySQL s'utilisant via un langage de programmation, PHP étant LE langage de prédilection de MySQL... 

Le meilleur moyen de se mettre à MySQL et de progresser est d'installer EasyPHP, un logiciel freeware qui crée un environnement serveur complet à la fois pour PHP et MySQL. 

Une base de données s'apparente à un tableau comportant des lignes appelées des enregistrements : si la base de données (bdd) comporte 6 lignes, cela signifie qu'il existe 6 enregistrements. Chaque enregistrement comporte un ou plusieurs champs. Un enregistrement extrait d'un carnet d'adresses simplifié pourrait, par exemple se présenter ainsi : 

id_user, nom, prénom, age. 



Les types de données avec MySQL

Au moment de créer une table, vous devez vous demander ce qu'elle va contenir car le type (de données) de chaque champ est très important et aura des conséquences dans la suite des évènements. 

Ainsi, dans notre table que nous nommerons "carnet", le champ "nom" pourra contenir n'importe quel caractère alors que le champ "âge" ne devrait en toute logique accueillir que des numériques. Voici un aperçu des types possibles acceptés par MySQL : 


create table carnet (
nom varchar,
prenom varchar,
age int
);

MySQL vous permet de spécifier pour chaque type le nombre de caractères qu'il sera possible de stocker. Si vous prévoyez qu'aucun de vos contacts n'aura un nom plus long que 50 caractères et qu'aucun de vos contacts n'aura raisonnablement plus de 99 ans, vous pourrez coder : 


create table carnet (
nom varchar (50),
prenom varchar (50),
age int (2)
);

Les différents types proposés par MySQL sont classés en 3 catégories :
  • les numériques
  • les alphanumériques
  • les types "date" (non décrits ici)
Les types numériques


  • Ils peuvent être classés à leur tour par rapport à leur "longueur", ie, la taille des données qu'ils peuvent accueillir. Dans l'ordre décroissant, on trouve principalement :int (accepte des nombres de -2147483648 à +2147483647)
  • mediumint (accepte des nombres de -8388608 à +8388607)
  • smallint (accepte des nombres de -32768 à +32767)
  • tinyint (accepte des nombres de -128 à +127)
Note : chaque type accepte un nombre compris dans la plage des valeurs entre parenthèses 
Note 2 : un type peut accepter ou pas les valeurs négatives (par défaut, elles sont acceptées) 
Note 3 : il existe d'autres types (bigint, décimaux) décrits sur le site officiel de MySQL... 

Pour revenir à notre table "carnet", il en ressort que nous pouvons modifier certains éléments. En particulier, le champ "age", de toute évidence, ne doit pas être de type int mais de type tinyint. Et comme il s'agit de l'âge de nos contacts, il n'y a aucune raison de permettre des valeurs négatives.

Nous devrions donc coder notre table ainsi : 


create table carnet (
nom varchar (50),
prenom varchar (50),
age tinyint (2) unsigned
);


C'est du pareil au même, direz-vous... Simplement sachez que MySQL réserve pour chaque champ un espace mémoire spécifique. Ainsi, pour le champ int, 4 octets sont réservés et seulement 1 pour le champ tinyint... Si votre table contient finalement 10000 enregistrements * 1 octet ou 4 (selon le type choisi), la différence sur le poids de votre base peut aller du simple au quadruple ! 

Lorsque vous créez votre table "carnet", vous avez l'intention d'enregistrer plusieurs contacts. Pour différencier les données qui vont venir alimenter la table, MySQL se sert des identifiants. Il s'agit d'un numéro associé à chaque enregistrement, un peu comme un numéro de série. Ce nombre s'auto-incrémentera à chaque enregistrement et il vous appartient de créer ce champ explicitement : 


create table carnet (
id_carnet smallint unsigned auto_increment,
nom varchar (50),
prenom varchar (50),
age tinyint (2) unsigned
);


Nous avons choisi délibérément smallint car raisonnablement on peut penser que vous aurez sensiblement moins de 2147483647 contacts (comme envisagés avec le type int) et plus que les 127 prévus par le typetinyint... 

Note : nous avons indiqué aussi que ce champ ne pouvait pas être négatif (avec unsigned) et explicitement déclaré qu'il s'auto-incrémentait avecauto-increment.


Les types alphanumériques


  • Les principaux sont :char (accepte de 1 à 255 caractères). ex. char(5)
  • varchar (accepte de 1 à 255 caractères) ex. varchar(30)
  • text (accepte jusqu'à 65535 caractères)
Note : char occupe un espace mémoire fixe. Si vous codez char(8) et que les données saisies font 4 caractères, ce champ occupera tout de même 8 caractères en mémoire. Le type varchar permet d'ajuster cet espace mémoire. Si vous déclarez varchar(20) et que les données saisies font 5 caractères, votre champ n'occupera effectivement que 5 caractères. 

Aucun commentaire:

Enregistrer un commentaire