Documente Academic
Documente Profesional
Documente Cultură
TP FIP
1
TOC
Les Systèmes de Gestion de Base de Données
Qu’est-ce qu’une base de données ?
Rôle d’un SGBD
SQL : présentation du langage
Principe, types, fonctions, etc…
Les composants ActiveX Data Objet
Connexion, commande, tableau
Exemples de code
Quelques références
Pour MySQL :
http://www.mysql.com/Downloads/Manual/manual.pdf
Pour ADO :
Dans MSDN :
-SDK Platform
-Database and Messaging Services
-Microsoft ActiveX Data Objects
-Manuel de référence du programmeur ADO
2
Base de données
Un ensemble structuré de données
Différents modèles de structuration
Composants du modèle relationnel
Des tables dont la structure se calque sur les
relations entre les objets
Des attributs pour décrire chaque relation
Un ensemble d'opérateurs pour agir sur les
relations
Des règles d'intégrité pour garantir l’exactitude et
la cohérence des données
3
Terminologie
d e f
ID_mesure Date Heure T° Hr ID_site
c 1 10/04/01 12:00 12,4 67,1 1
2 10/04/01 10:00 15,2 56,7 2
3 10/04/01 14:00 g14,2 59,8 1
4 10/04/01 10:00 16,3 63,2 3
5 10/04/01 12:00 11,2 68,1 2
6 10/04/01 14:00 10,6 64,3 2
4
Rôle d’un SGBD
Un SGBD doit assurer :
La définition des données
5
Le langage SQL
Qu’est-ce que c’est ?
SQL : Structured Query Language
Langage de requête standard (ANSI92)
Types de variables
Numériques, dates et heures, chaînes…
Fonctions
Insert, select, delete, etc…
Conventions d'écriture
Dans la présentation du langage, on utilisera les conventions d'écriture
suivantes :
commande commande ou option dans le client
'fichier' nom de fichier
'%' séquences de caractères
shell> ligne de commande DOS
mysql> ligne de commande MySQL
SELECT fonction SQL
[LIKE] paramètre optionnel
[LIKE|UNLIKE] le '|' sépare les choix possibles
{col_name|wild} paramètre imposé
Remarques générales
Une commande SQL se termine toujours pas un ';' ou \g.
On peut écrire une commande sur plusieurs lignes en tapant un carriage
return.
Pour utiliser une base de données, utiliser :
mysql>USE dbname
On peut aussi appeler une table par dbname.tbname.
6
Types de variables
On distingue trois principaux types : M : nb. Caract.
Numérique D : nb. Décim.
INT(M,D), FLOAT(M,D), DOUBLE(M,D), etc…
Date et heure
DATETIME ‘YYYY-MM-DD HH:MM:SS’, entre autres
Chaîne de caractère
CHAR(M)
Le type est définit lors de la création de la table et
impose un format aux données de chaque champs
Le type influence :
le format de stockage (nombre de bytes alloués)
les opérations de traitement (opérations mathématiques,
tris, etc…)
Types numériques
Les entiers :
TINYINT (1 byte), SMALLINT (2 bytes), MEDIUMINT (3 bytes), INT (4
bytes), INTEGER (4 bytes), BIGINT (8 bytes)
Les décimaux :
FLOAT(X) (4 bytes if X <= 24 or 8 bytes if 25 <= X <= 53), FLOAT (4
bytes), DOUBLE (8 bytes), REAL (8 bytes)
Remarque : le type de variable est déterminant dans la rapidité
d’exécution des requêtes. Il n’est pas inutile d’y réfléchir avant de créer
une table pouvant contenir plusieurs centaines de milliers
d’enregistrement.
Types date et heure
DATE (3 bytes), DATETIME (8 bytes), TIMESTAMP (4 bytes), TIME (3
bytes), YEAR (1 byte)
Les plus utiles :
DATETIME : date et heure au format 'YYYY-MM-DD HH:MM:SS‘
TIMESTAMP : si la date d’écriture est une donnée, comme par exemple
dans le cas de transactions avec un client.
Types chaînes de caractères
CHAR(M) (M bytes), VARCHAR(M), TINYBLOB, TINYTEXT, BLOB,
TEXT (L+2 bytes), MEDIUMBLOB, MEDIUMTEXT (L+3 bytes),
LONGBLOB, LONGTEXT
Utiliser simplement CHAR(M) pour stocker une chaîne de caractères,
avec M caractères.
7
Create table
Permet la création d'une table :
mysql>CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
tbl_name [(create_definition,...)]
[table_options] [select_statement]
Exemple :
mysql>CREATE TABLE tPizza (
Id INT NOT NULL AUTO_INCREMENT,
nom CHAR(30) NOT NULL,
prix Float(6,2) NOT NULL,
PRIMARY KEY (Id)
NULL ≠ 0
);
CREATE TABLE
L'option [TEMPORARY] créé une table dans le répertoire c:\tmp. Elle
n'est pas visible avec SHOW TABLES et est supprimée lors de la clôture de
la connexion. Une table temporaire peut être utile lorsqu'une requête
nécessite une étape intermédiaire.
L'option [IF NOT EXISTS] permet de ne pas générer d'erreur si le nom
existe déjà.
Les paramètres [(create_definitions),…] caractérisent chaque
champs. On précise :
col_name type [NOT NULL | NULL] [DEFAULT
default_value] [AUTO_INCREMENT] PRIMARY KEY
(index_col_name,...)
NULL : absence de donnée (différent de zéro)
DEFAULT : valeur à donner si le champ n'est pas renseigné
AUTO_INCREMENT : numérotation automatique des champs. Remarquer
qu'un entier ne peut être ré-attribué si un enregistrement est effacé. Ainsi,
l'entier incrémenté ne correspond pas nécessairement au numéro de
l'enregistrement. En revanche, il est unique.
PRIMARY KEY : combinaison de UNIQUE et NOT NULL. Généralement,
on l'obtient pas auto-incrémentation.
[table_options] et [select_statement] ne seront pas abordés
ici.
8
Insert
Permet d'entrer des données dans la table
Trois solutions :
mysql>INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]VALUES
(expression,...),(...),...
mysql>INSERT [LOW_PRIORITY |DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)] SELECT ...
mysql>INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name SET col_name=expression,
col_name=expression, ...
Exemple :
mysql>INSERT INTO tPizza VALUES
(1,’traditionnelle’,8.55),(2,’Reine’,10.20);
INSERT
On a trois possibilités :
VALUES : on entre une suite de valeurs pour chaque champs
SELECT : on entre des données issues d'une sélection dans une autre table
SET : on fixe les données comme étant le résultat d'une expression
Remarque que pour INSERT … VALUES et INSERT … SELECT, col_name est
facultatif. Par défaut, tous les attributs sont concernés, dans leur ordre
d'apparition dans la table. Ainsi, si une table contient quatre attributs et que vous
entrez un INSERT … VALUES ("A",1), il y aura une erreur car le nombre de
champs renseignés ne correspond pas au nombre de champs de la table.
Par ailleurs, dans le cas suivant :
mysql>INSERT INTO t_site (lat, long) VALUES
(998100.125,112458.531);
si les champs non renseignés ont été configurés comme NOT NULL, il y aura une
erreur.
Dans le cas d'une auto-incrémentation, la valeur du champ doit être NULL ou non
renseignée. Par exemple, si l'id_site est auto-incrémenté, on écrira :
mysql>INSERT INTO t_site (lat, long, nom) VALUES
(998100.125,110125.247,"Illkirch"),(998150.214,111245.268,"Nieder
bronn-les-bains");
9
Select
Permet d'extraire des données suivant un ou plusieurs
critères :
mysql>SELECT [(format)] [(source file)] FROM
table_references [(select_expression)];
Quelques exemples :
mysql>SELECT 1+1;
mysql>SELECT * FROM tPizza;
mysql>SELECT * FROM tPizza WHERE prix<15 AND
prix>10;
SELECT
[(format)] : [(col_name),…)] [STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT]
[SQL_BUFFER_RESULT] [HIGH_PRIORITY]
[DISTINCT|DISTINCTROW|ALL]
Dans le cas d'une sélection de tous les attributs de la table, on
peut remplacer [(col_name),…)] par '*'.
[(source_file)] : [INTO{OUTFILE|DUMPFILE} 'file_name'
export_options]
Permet d'importer des données à partir d'un fichier ASCII.
[(export_option)] définit le format des données dans le
fichier (séparateurs de champs, séparateurs d'enregistrements,
etc…)
[(select_expression)] : [WHERE where_definition]
[GROUP BY {unsigned_integer|col_name|formula}
[ASC|DESC], ...][ORDER BY
{unsigned_integer|col_name|formula} [ASC|DESC] ,...]
[LIMIT [offset,] rows] [PROCEDURE procedure_name]];
[GROUP BY] permet de faire des regroupement sur un critère ou
par ordre ASC ou DESC.
[ORDER BY] permet de classer les champs.
[LIMIT] permet de n'extraire que les N premiers
enregistrements sélectionnés.
10
Select (suite)
Quelques fonctions utiles avec SELECT :
SELECT (suite)
Les fonctions d’aggrégation ne peuvent être utilisées dans une requête
imbriquée.
Par exemple :
mysql>SELECT nom FROM t_Client WHERE id=MAX(id);
Pour obtenir ce type d’information, il faut donc
procéder en deux étapes. Dans ce cas précis, on peut
aussi utiliser la requête suivante :
mysql>SELECT nom FROM t_Client ORDER BY id DESC limit
1;
11
Join
S’utilise avec Select pour joindre deux tables suivant
une clé primaire.
Par exemple :
mysql>SELECT t1.M_ID, t2.nom from tCommande as
t1, tClient as t2 WHERE t1.C_ID=t2.C_ID;
Ici, on cherche à associer les identifiants de commande (M_ID)
avec les noms de clients (nom) en utilisant comme clé l’identifiant
de client (C_ID).
Ecrire tCommande as t1 revient à attribuer un alias à la table, ce
qui évite d’avoir à taper les noms complets.
JOIN
Dans le cas d’une jointure complète de deux tables, on peut écrire la
requête sous la forme :
mysql>SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id;
Ou
mysql>SELECT * FROM t1 LEFT JOIN t2 USING(id);
Par exemple, si vous voulez la liste de toutes les
transactions pour un client donné à partir de son nom
:
mysql>SELECT * FROM tCommande LEFT JOIN tClient ON
tCommande.C_ID=tClient.C_ID WHERE
tClient.nom=‘Durand’;
12
Update
Permet de modifier la valeur d'un champ :
Par exemple :
mysql>UPDATE tPizza SET prix=12.5 WHERE
nom=‘traditionnelle’;
UPDATE
[LOW_PRIORITY] signifie que cette opération est reportée jusqu'à ce
que plus personne n'utilise la table.
Remarquer qu'il est conseillé de verrouiller une table lorsque l'on fait des
modifications en utilisant la commande LOCK.
[IGNORE] permet de ne pas générer d'erreur liée à un conflit d'intégrité.
Les enregistrements posant problème ne sont pas mis à jour. C'est une
extension MySQL au SQL92.
L'utilisation de [LIMIT] permet de s'assurer qu'un nombre restreint
d'enregistrements sont modifiés.
Si la valeur mise à jour est la valeur du champ, aucune opération n'est
effectuée.
13
Delete
Permet d'effacer un enregistrement :
Exemple :
mysql>DELETE FROM tClient WHERE nom=‘Durand’;
DELETE
La fonction DELETE impose de faire une sélection. On ne peut pas faire
par exemple :
mysql>DELETE * FROM t_site;
Par contre, rien n'empêche de faire :
mysql>DELETE FROM t_site WHERE id_site<>0;
L'utilisation de LIMIT permet de partitionner la tâche dans le cas où elle
prendrait énormément de temps. On ne l'utilise généralement pas dans
notre cas.
14
Drop
Permet d'effacer une table :
Exemple :
mysql>DROP TABLE tPizza;
DROP
Les deux options [RESTRICT | CASCADE] ne sont pas fonctionnelles pour le
moment.
Cette fonction permet aussi d'effacer une base de données, mais
seulement venant de l'administrateur.
15
Alter
Permet de modifier la structure d'une table :
mysql>ALTER [IGNORE] TABLE tbl_name alter_spec [,
alter_spec ...]
ALTER
Autres [alter_specification]:
ADD [COLUMN] (create_definition, create_definition,...)
or ADD INDEX [index_name] (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ADD FULLTEXT [index_name] (index_col_name,...)
or ADD [CONSTRAINT symbol] FOREIGN KEY index_name
(index_col_name,...)
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
or CHANGE [COLUMN] old_col_name create_definition
or MODIFY [COLUMN] create_definition
or DROP INDEX index_name
or ORDER BY col
or table_options
Compte tenu des potentialités de la fonction ALTER et donc des dégâts
qu'une mauvaise utilisation peut engendrer, elle fait l'objet d'un privilège
spécifique.
16
Liaisons VB/MySQL
Application Visual Basic 6.0
Objet Command DataGrid MS Chart
Serveur MySQL
17
Source ODBC
Le driver MyODBC
est installé sur tous
les PC
Les champs
‘database’, ‘user’ et
‘password’ seront
renseignés par votre
application VB
18
Les objets ADO
Connection
Error
Property
Command
Parameter
Property
Recordset
Field
Property
property
19
Connexion ADO
Pour se connecter :
Public Sub OpenConnectionMySQL()
On Error GoTo CheckError
strCnnMySQL = "DSN=" & DSN & ";uid=" & User & ";pwd="
& Password & ";database=" & Database
Set connectMySQL = New ADODB.Connection
connectMySQL.Open strCnnMySQL
CheckError:
Open "cnx.log" For Append As #256
Print #256, Date, Time, Err.Description
Close #256
End Sub
Pour se déconnecter :
Public Sub CloseConnectionMySQL()
connectMySQL.Close
End Sub
Principe :
-Définir la chaîne de connexion. Ici, on créé la chaîne en concaténant les
valeurs de variables renseignées par l’utilisateur dans une boit de dialogue
de connexion.
-Utiliser la méthode Open en fournissant la chaîne de connexion.
20
Commande SQL
Public strSQL As String ‘Expression SQL
Dim cmdSQL As New ADODB.Command 'Commande de la
chaine
Principe :
-Définir la connexion associée à l’objet de commande
-Définir le type de commande (propriété CommandType de l’objet
Command). Correspond à l’objet de la commande, comme par exemple
une expression SQL, un nom de table, etc…
-Définir la chaîne de la commande (propriété CommandText de l’objet
Command)
-Exécuter la commande (méthode Execute)
21
Recordset ADO
Public rstAll As New Recordset
Paramètres :
Source : instruction SQL, nom de table…
ActiveConnection : connexion ADO préalablement déclarée
CursorType : ici adOpenStatic (ouvre un curseur de type statique). Suivant
la source de données, les autres possibilités peuvent ne pas fonctionner.
LockType : type de vérouillage pour des accès concurents à une même
source de données
22
Administration et accès
Seuls les utilisateurs déclarés ont accès au serveur.
On distingue :
l’administrateur :
a tous les droits
gère les comptes utilisateurs et les privilèges
les utilisateurs :
sont déclarés comme user@host pour accéder à au moins une
base de données
sont limités dans leurs actions en fonction des privilèges qui
leurs sont attribués
Administration et accès
Chaque utilisateur est identifié par :
• un nom (user)
• le nom de la machine cliente (host)
Chaque utilisateur a alors un certain nombre de privilèges, qui lui sont
attribués par l'administrateur. Les privilèges concernent différents niveaux
:
• le serveur tout entier
• une base de données
• une table d'une base de données
• une colonne d'une table d'une base de données
Un utilisateur peut donc avoir des privilèges limités selon la machine
cliente qu'il utilise. De même, chaque utilisateur n'a de droits que sur la
partie d'une bases de donnée qu'il le concerne directement.
23
Pour ce TP…
Le serveur : mirv.u-strasbg.fr
Le DNS : MySQL
La base de données :
Dupliquée pour 8 binômes
Un utilisateur par base
En cas de gaffe, me demander pour restaurer la
base
De la documentation se trouve à l’adresse
http://mirv.u-strasbg.fr
24