• Aucun résultat trouvé

Exemple de table: Contenu de la table Exemple de table: Exemple de table: Acteur Film Role Role Base de donnée relationnelle 1

N/A
N/A
Protected

Academic year: 2022

Partager "Exemple de table: Contenu de la table Exemple de table: Exemple de table: Acteur Film Role Role Base de donnée relationnelle 1"

Copied!
7
0
0

Texte intégral

(1)

IFT1147

Programmation Serveur Web avec PHP Introduction à MySQL

IFT1147 - Introduction à MySQL 2

Base de donnée relationnelle

Une base de données relationnelle est composée de plusieurs tables possédant des relations logiques (théorie des ensembles) entre elles.

Chaque table possède plusieurs attributs.

Chaque ligne d’une table est un ensemble de valeurs pour les mêmes attributs.

IFT1147 - Introduction à MySQL 3

Exemple de table: Film

1952 Singing in the Rain

4

1960 Psycho

3

1990 Cyrano de Bergerac

2

1997 Les Boys

1

annee titre

filmID

Le filmID permet d’identifier chaque ligne de façon unique.

IFT1147 - Introduction à MySQL 4

Exemple de table: Acteur

1969-01-02 Patrick

Huard 6

1967-06-20 Nicole

Kidman 5

1932-04-04 Anthony

Perkins 4

1912-08-23 Gene

Kelly 3

1947-08-16 Marc

Messier 2

1948-12-27 Gerard

Depardieu 1

Naissance Prenom

Nom acteurID

IFT1147 - Introduction à MySQL 5

Exemple de table: Role

Cette table fait le lien entre les acteurs et les films.

IFT1147 - Introduction à MySQL 6

Contenu de la table Role

Ti-Guy 6

1

Don Lockwood 3

4

Norman Bates 4

3

Cyrano de Bergerac 1

2

Bob 2

1

Personnage acteurID

filmID

(2)

IFT1147 - Introduction à MySQL 7

MySQL et MySQL AB

MySQL est un serveur de base de données produit par MySQL AB qui peut, sous certaines conditions, être utilisé gratuitement (double licence).

Nous utiliserons la version 3.23

Le site Web de référence est http://www.mysql.com

IFT1147 - Introduction à MySQL 8

MySQL - limitations

La version 3.23 de MySQL dont nous nous servirons comporte plusieurs limitations

Aucun subselect n’est possible

Pas de support pour des foreign key

Pas de support pour des transactions

Pas de trigger, view, stored procedure

IFT1147 - Introduction à MySQL 9

Connexion

Le serveur MySQL est installé sur europa.iro.umontreal.ca et ne peut être accédé qu’à partir du domaine iro.umontreal.ca.

Votre nom d’usager MySQL est le même que votre login Unix, le mot de passe initial est celui de la recette Unix initiale.

IFT1147 - Introduction à MySQL 10

Connexion

Vous pouvez seulement créer des bases de données dont le nom débute par votre login suivi de _, par exemple dift1147_Cinema

Personne à part vous (et l’administrateur du serveur) ne possède de droits (même de consultation) sur vos bases de données.

Ligne de commande mysql

mysql est le logiciel de prédilection pour interagir avec le serveur MySQL.

Il est installé par défaut

Il est créé et supporté par MySQL AB

Il fonctionne sous tout système d’exploitation

D’autres logiciels incluent PHPMyAdmin, mysqlcc, MySQL Administrator, …

Connexion avec mysql

Afin que le client mysql puisse se connecter au serveur, vous devez lui donner le nom du serveur, votre nom d’usager et votre login

mysql -h europa.iro.umontreal.ca -u login -p

Le système vous demandera alors votre mot de passe.

(3)

IFT1147 - Introduction à MySQL 13

Lister les bases de données

show databases permet d’afficher la liste de toutes les bases de données du serveur.

Il y en a beaucoup … donc, afin de trouver les vôtres, il vaut mieux spécifier que le nom de celles que vous cherchez commence par votre login

show databases like ’dift1147_%’;

IFT1147 - Introduction à MySQL 14

Choisir une base de données

Afin de travailler avec une des bases de données, on utilise la commande use use dift1147_Cinema;

La prochaine étape est d’obtenir la liste des tables

show tables;

ou, comme précédemment

show tables like ’%toto% ’;

IFT1147 - Introduction à MySQL 15

La structure d’une table

Afin de connaître la liste des colonnes d’une table, on peut utiliser la commande

describe nomDeLaTable;

Et pour obtenir la commande SQL complète permettant de recréer la structure d’une table

show create table nomDeLaTable;

IFT1147 - Introduction à MySQL 16

Finalement, les données …

La commande SQL SELECT permet d’extraire les informations d’une ou plusieurs tables.

SELECT titre, annee FROM Film;

Si on veut obtenir toutes les colonnes SELECT * FROM Film;

IFT1147 - Introduction à MySQL 17

Avant d’aller plus loin

La casse n’a pas d’importance pour les mots clés SQL. Elle importe pour ce qui est des noms des tables !

Les retours à la ligne à l’intérieur d’une commande ne servent qu’à la lisibilité.

Afin que le client envoie une commande au serveur, elle doit être terminée par ; (ou par \G)

IFT1147 - Introduction à MySQL 18

Résultats distincts

Dans la table Film, plusieurs films peuvent porter le même titre.

SELECT titre FROM Film;

retournera alors des duplicats.

Si on ne souhaite pas obtenir de duplicats, il faut écrire

SELECT DISTINCT titre FROM Film;

(4)

IFT1147 - Introduction à MySQL 19

Limiter les résultats de SELECT

Les résultats retournés par SELECT peuvent être limités en utilisant WHERE SELECT titre, annee

FROM Film

WHERE annee = 1997;

SELECT * FROM Film WHERE titre LIKE ’P% ’;

IFT1147 - Introduction à MySQL 20

Ordonner les résultats de SELECT

ORDER BY ordonne les résultats. Les colonnes du tri n’ont pas besoin d’être affichées

SELECT titre FROM FILM ORDER BY annee ASC;

ORDER BY doit être utilisé après WHERE SELECT * FROM FILM

WHERE annee=1997 ORDER BY titre;

IFT1147 - Introduction à MySQL 21

Limiter - encore

De grandes bases de données contiennent des centaines de millions d’entrées. Il est inimaginable de toutes les afficher d’une seule fois.

Souvent, on n’a besoin que des 100 premières (selon l’ordre choisi). On peut alors utiliser LIMIT.

IFT1147 - Introduction à MySQL 22

Limiter - exemple

Voici comment afficher les 5 premiers films (en ordre alphabétique) qui ont été tournés en 1997

SELECT * FROM Film

WHERE annee = 1997 ORDER BY titre ASC LIMIT 5;

Nombre de lignes

Si on n’est pas vraiment intéressé au résultat d’une requête, mais seulement au nombre de lignes qu’elle retourne, il vaut mieux utiliser la fonction count (moins de transfert de données).

SELECT COUNT(*) AS nombre FROM Film

WHERE annee = 1997;

Quelques fonctions utiles

Afin de manipuler des chaînes de caractères, on peut utiliser (entre autres)

LEFT(colonne, nbChr)

RIGHT(colonne, nbChr)

CONCAT(chaine1, chaine2)

Dans la condition WHERE, on peut utiliser AND, OR, BETWEEN et ISNULL

(5)

IFT1147 - Introduction à MySQL 25

Plusieurs tables dans une requête

Le FROM d’une requête peut contenir plusieurs tables, séparées par des virgules.

SELECT *

FROM Acteur, Role

Le résultat de la requête est alors le produit cartésien des deux tables.

IFT1147 - Introduction à MySQL 26

Plusieurs tables - suite

La plupart du temps, on ne veut obtenir que les lignes « reliées » des deux tables, et non pas le produit cartésien au grand complet.

Il faut alors spécifier la relation dans le WHERE.

SELECT * FROM Acteur, Role

WHERE Acteur.acteurID=Role.acteurID;

IFT1147 - Introduction à MySQL 27

Plusieurs tables - ce n’est pas fini

Dans certains cas, seulement les lignes reliées entre deux tables ne sont pas non plus le résultat souhaité.

Que faire s’il faut obtenir tous les éléments d’une première table qui ne possèdent pas d’entrée dans une autre, par exemple tous les acteurs qui n’ont encore eu aucun role ?

IFT1147 - Introduction à MySQL 28

Plusieurs tables - LEFT JOIN

La clause LEFT JOIN permet de retourner toutes les entrées d’une première table avec, s’il y a correspondance, les entrées d’une deuxième, et NULL dans toutes les colonnes réservées à la deuxième table s’il n’y a pas de correspondance.

IFT1147 - Introduction à MySQL 29

LEFT JOIN - exemple

SELECT Acteur.*

FROM Acteur LEFT JOIN Role

ON Acteur.acteurID = Role.acteurID WHERE isnull(Role.acteurID);

Un LEFT JOIN est beaucoup plus lent à exécuter qu’un lien direct. À n’utiliser qu’en cas de besoin.

IFT1147 - Introduction à MySQL 30

Sauvegarde

Avant de modifier les données dans les tables, mieux vaut savoir créer une sauvegarde !

Le logiciel mysqldump est l’utilitaire nécessaire. Il prend les mêmes

arguments que le client mysql; de plus, on doit aussi spécifier le nom de la base de données à sauvegarder.

(6)

IFT1147 - Introduction à MySQL 31

Sauvegarde - côté pratique

La sauvegarde créée par mysqldump contient toutes les instructions SQL afin de recréer la base de données.

mysqldump -h europa -u dift1147 -p dift1147_Cinema > cinema.sql

Pour restaurer

mysql -h europa -u dift1147 -p dift1147_Cinema < cinema.sql

IFT1147 - Introduction à MySQL 32

Insérer de nouvelles données

La commande INSERT permet d’insérer de nouvelles données dans une table.

On peut spécifier les valeurs à insérer ou utiliser le résultat d’une requête.

INSERT INTO Film(titre, annee) VALUES (’LES Boys’, 1997);

INSERT INTO Film(titre, annee) SELECT titre, annee FROM Table;

IFT1147 - Introduction à MySQL 33

Effacer des données

La commande DELETE sert à effacer des données.

N’oubliez pas le WHERE, sinon, la table est vide instantanément !

Il n’y a pas de poubelle, ni de undo DELETE FROM Acteur

WHERE acteurID = 1;

IFT1147 - Introduction à MySQL 34

Modifier les données

On peut modifier les entrées d’une table avec la commande UPDATE.

De nouveau, mieux vaut ne pas oublier le WHERE

UPDATE Acteur

SET prenom = ’Gaston’,

naissance = ’1950-12-12’

WHERE acteurID = 1;

Créer la structure d’une table

On crée la structure d’une table avec la commande CREATE TABLE

Il faut spécifier

Le nom de la table

Pour chaque colonne, son nom et le type de données

Les clés (indices)

Type de colonnes

Les types de colonnes les plus usuels

VARCHAR(lon)

chaîne de caractères de longueur variable

INT

un entier entre -2147483648 et 2147483647

SMALLINT

un entier entre -32768 and 32767

DATE

une date en format AAAA-MM-JJ

(7)

IFT1147 - Introduction à MySQL 37

Clés et indices

Clé et indice sont des synonymes pour MySQL

On se sert des clés pour

Empêcher des duplicats

Accélérer les recherches

Il existe trois clés: clé primaire (primary key), clé unique (unique key) et la clé (key).

IFT1147 - Introduction à MySQL 38

Clés - suite

Une table ne peut posséder qu’une seule clé primaire.

Une clé primaire est une clé unique particulière: la différence se situe au niveau du traitement des valeurs nulles.

Une clé unique empêche les duplicats.

Une clé sert à accélérer les recherches.

IFT1147 - Introduction à MySQL 39

Clés - quand les utiliser

Chaque table devrait avoir une clé primaire.

Une colonne qui est souvent utilisée dans un WHERE devrait avoir une clé.

Les clés utilisent de l’espace disque et ralentissent les insertions (et parfois les modifications) … il ne faut donc pas exagérer.

IFT1147 - Introduction à MySQL 40

Création d’une table - exemple

CREATE TABLE Acteur (

acteurID INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,

nom varchar(40) NOT NULL, prenom varchar(40) NOT NULL, naissance DATE NOT NULL, PRIMARY KEY(acteurID), KEY nom(nom)

);

IFT1147 - Introduction à MySQL 41

Modifications de la structure

On peut aussi modifier la structure d’une table une fois qu’elle a été créée

Les commandes sont de la forme ALTER TABLE nomTable

Effacer une colonne ALTER TABLE nomTable DROP COLUMN nomColonne;

IFT1147 - Introduction à MySQL 42

Modifications de la structure

Ajouter une clé

ALTER TABLE nomTable ADD key(nomCol, nomCol2);

Ajouter une colonne ALTER TABLE nomTable

ADD COLUMN nomCol VARCHAR(40) AFTER autreCol;

Références

Documents relatifs

Les potentialités des zones sahéliennes et soudaniennes permettent des mouvements du bétail qui constituent un élément important de l’économie sous-régionale. A partir

[r]

championnats nationaux d’athlétisme pour jeunes de la Légion, sont priés de soumettre une lettre d’intention et un Formulaire de demande d’accueil (fourni par la

Le résultat de la soustraction est écrit dans la case où se rencontrent la ligne 6 et la colonne

3) Le GROUP BY consiste d'abord en un ORDER BY : les tuples restants sont triés selon les valeurs croissantes de la liste des attributs du group by ; ca génère des sous-ensembles. 4)

Comme la serveuse n’a pas beaucoup de temps, elle est obligé d’écrire en abréviations.. Reproduire puis compléter la facture pour la table

- Pour les Jeunes à partir de 13 ans et jusque 18 ans accomplis, les activités sont interdites en intérieur SAUF dans le cadre du protocole lié au décrochage scolaire et social..

Great Reed Warbler Acrocephalus arundinaceus Basra Reed Warbler Acrocephalus griseldis Upcher’s Warbler Hippolais languida Olive-tree Warbler Hippolais olivetorum Melodious