| MySQLServeur de base de données
![[Ilustration]](../../common/images/illustration21.jpg)  
Résumé: 
MySQL est un serveur de base de données SQL (Structured Query Language)
disponible sur de nombreuses plate-formes, dont Linux. La conception de
la version Linux a privilégié les performances. 
 
 
 
 IntroductionMySQL est un serveur de base de données SQL (Structured Query
	Language) . Il s'agit d'une application client-serveur composée d'un
	serveur et d'un certain nombre de clients. L'ambition de cet article n'est pas de définir ce qu'est une base
	de données SQL, car cela signifierait revenir aux origines des
	bases relationnelles, nous essaierons simplement de donner une
	présentation, une description de l'implémentation d'un serveur SQL
	spécifique. Rappelons pour l'histoire qu'IBM a mis SQL sur le marché en
	1981 et que depuis ce produit a joué un rôle fondamental dans le
	développement des bases de données relationnelles. IBM a proposé une
	version de SQL à l'Institut National Américain des Standards (ANSI)
	(qui fut accepté par la suite) et depuis l'usage de ce dernier s'est
	généralisé dans les bases de données relationnelles. DB2, la base de
	donnée la plus répandue à l'époque, a été créée en 1983 et est utilisée
	pricipalement en environnement mainframe. Dans le monde GNU, l'une des bases de données les plus citées dans
	le domaine des bases relationnelles sous Linux est MySQL. Cette
	application n'est incluse dans aucune des distributions Linux car
	elle n'est pas disponible sous licence de type GNU et l'utilisation
	commerciale de MySQL ou des applications qui l'exploitent 
	nécessite l'acquisition d'une license. Ce serveur de base de données est considéré (c'est même mentionné
	explicitement dans la documentation)  comme le plus rapide et
	le plus robuste pour des volumes de données importants ou
	modestes. (en le comparant aux autres serveurs de sa catégorie
	bien sûr). Comme nous l'expliquerons plus loin, la rapidité de
	traitement est obtenue au détriment de l'implémentation d'un certain
	nombre de fonctionnalités du standard SQL. MySQL est disponible (Sources et Binaires) pour :
	  Linux 2.0+,  SCO, Solaris 2.5,
	2.6, SUNOS 4.x, BSDI 2.x, 3.0, SGI IRIX 6.x, AIX 4.x, DEC UNIX 4.x,
	HPUX 10.20, Windows 95 (désolé), et sur les systèmes les plus
	répandus. La version libre a été développée par Michael Windenis, et la
	version commerciale est distribuée par TCX  Datakonsulter AB. Caracteristiques principales
	Les premiers objectifs du design de MySQL sont vitesse et
	robustesse.Ecrit en C et C++,
	testé avec GCC 2.7.2.1. Utilise GNU autoconf pour la  portabilité.Clients en C, C++, JAVA, Perl, TCL.Support Multiprocesseur, le serveur peut exploiter plusieurs CPU
	s'ils sont présents.Fonctionne sur de multiples plate-formes et O.S.Système de mots de passe et d'autorisations très flexible et
	sûr.Tous les mots de passe sont cryptés avant transmission.Enregistrements de taille fixe et variable.16 indices par table, chaque index est constitué de 1 à 15
	colonnes ou une partie d'entre elles jusqu'à une longueur maximum de
	127 octets.Toutes les colonnes peuvent avoir des valeurs par défaut.Un utilitaire fourni (Isamchk) contrôle, optimise et répare les
	tables.Toutes les données stockées sont au format ISO8859_1.Les clients utilisent des Sockets TCP ou UNIX pour
	communiquer avec le serveur.Le serveur permet de choisir la langue des messages d'erreur.Toutes les commandes proposent de l'aide à travers les options
	-help ou -?.Les types des colonnes peuvent être choisis parmi un large
	choix : entiers de 1,2,3,4 et 8 octets, flottants, double précision,
	caractères, dates, énumérations, etc.ODBC pour Windows 95
	(avec les sources), ACCESS peut être utilisé pour se connecter au
	serveur InstallationNaturellement, il est nécessaire de télécharger les sources sur le
	WEB avant d'installer la base de données : http://www.tcx.se 
 
 ou par FTP :
 ftp://ftp.sunet.se/pub/unix/databases/relational/mysql
 
 D'abord, il faut décider de télécharger une distribution source ou
	binaire. La seconde est plus simple à installer, mais elle n'est pas
	 disponible pour toutes les plate-formes (En fait, elle est
	disponible pour toutes les plate-formes habituelles).  Installation BinaireAprès avoir téléchargé le fichier :mysql-Version.tar.gz 
 procéder à son désarchivage. Il y a de nombreuses méthodes, voici
	celle que je préfère : 
	 décomprer d'abord :gunzip -dfv	mysql-Version.tar.gz
 puis extraire les fichiers de l'archive :tar -xvf mysql-Version.tar
 
 En lançant la commande tar à partir du répertoire /usr/local, les
	fichiers de l'archive seront placés dans/usr/local/mysql-3.20.32a-pc-linux-gnu-i586
 Ce n'est pas un nom très pratique, c'est pourquoi il est
	recommandé (conformément au guide d'installation) d'établir un lien
	symbolique vers ce répertoire.> ln -s mysql-3.20.32a-pc-linux-gnu-i586/bin   mysql 
 Le répertoire mysql contient alors : 
	drwxr-xr-x      8192
	Nov 24  1993 bin
	drwxr-xr-x      8192 Nov
	24  1993 etc
	drwxr-xr-x      8192 Aug
	17  1997 i18n
	drwxr-xr-x       8192 Mar
	16  1994 include
	drwxr-xr-x      8192 Mar
	19 02:03 jdk1.1.3
	drwxr-xr-x      8192 Aug
	17  1997 jre
	drwxr-xr-x      8192 Mar
	16  1994 lib
	lrwxrwxrwx    36 Jan
	18 19:40 mysql 
	drwxr-xr-x      8192
	Feb  5 00:07 mysql-3.20.32a-pc-linux-gnu-i586
	drwxr-xr-x      8192 Nov
	24  1993 sbin
	drwxr-xr-x      8192 Nov
	24  1993 src
         et avec un cd mysql nous nous retrouvons dans le répertoire des
	binaires de MySQL. Si tout s'est bien passé, vous êtes prêts à lancer
	le serveur. Installation à partir des SourcesDécompresser et désarchiver les sources comme à la
	section précédente. 
 
	  cd mysql-Version 
	  ./configure
	 
	  make install
	 La distribution source est livrée avec beaucoup de documentation
 	sur le processus d'installation. On trouve des informations sur les
	bogues connus, des notes spécifiques aux plate-formes, plusieurs
	suggestions de paramétrage pour différentes configurations et même une
	collection de FAQ. Si le processus d'installation se déroule
	correctement à la première tentative (et ce serait bien la première
	fois) le résultat sera semblable au répertoire des binaires de la
	distribution précompilée. Une installation à partir des sources n'est recommandée qu'aux
	utilisateurs ayant une bonne expérience dans l'installation et
	la compilation de programmes et qui ont assez de temps et de
	patience pour résoudre les quelques problèmes qui ne manqueront
	pas d'apparaître lors de cette procédure. Premiers Pas. Administration
	(Sécurité)Après l'installation du serveur sur votre système avec l'une ou
	l'autre des méthodes décrites précédemment, le répertoire
	suivant :/usr/local/mysql-3.20.32a-pc-linux-gnu-i586 
 
 devrait contenir ces fichiers et répertoires: 
	
	
	-rw-r--r--       1
	root       root         4133    Oct     1  1997	INSTALL-BINARY
	-rw-r--r--       1 root   
	   root        16666   Oct     7 21:10 	INSTALL-SOURCE
	-rw-r--r--       1 root   
	   root        24088   Oct     27 23:06 	NEWS
	-rw-r--r--       1 root   
	   root         3562    Apr     11  1997 	PORTING
	-rw-r--r--       1 root   
	   root         8512     May    21  1997 	PUBLIC
	-rw-r--r--       1 root   
	   root         1963     Jul      31  1997 	README
	-rw-r--r--       1 root   
	   root         3416     Jun     4  1997 	TODO
	drwxr-xr-x    6 root      
	root         8192     Oct     28 00:44 	bench
	drwxr-xr-x    2 cuenta1 
	users        8192    Mar     27 00:42 	bin
	drwxr-xr-x    5 root      
	root         8192     Mar     31 00:26 	data
	drwxr-xr-x    2 root      
	root         8192    Oct      28 00:44 	include
	drwxr-xr-x    2 root      
	root         8192    Oct     28 00:44 	lib
	-rw-r--r--      1 root    
	  root       132883  Jun        8  1997 	mysql-faq.html
	-rw-r--r--      1 root    
	  root       117622  Jun      10  1997 	mysql-faq.txt
	-rw-r--r--      1 root    
	  root         9301    Jun      8  1997 	mysql-faq_toc.html
	drwxr-xr-x   4 root       
	root         8192   Oct     28 00:44 	mysqlperl
	drwxr-xr-x   2 root       
	root         8192   Oct     28 00:44 	scripts
	drwxr-xr-x   3 root      
	root         8192    Oct     28 00:44 	share
	drwxr-xr-x   2 root      
	root         8192    Oct     28 00:44 	tests
	 Pour plus d'information sur l'installation du serveur, consultez
	les  fichiers README, TODO, INSTALL, mysql-faq, etc., qui sont
	particulièrement complets et efficaces (cet article se base en
	partie sur eux). Le répertoire /data contiendra toutes les bases que
	vous allez créer sur le système, chacune placée dans un sous-réperoire
	séparé. L'installation initiale crée par défaut les fichiers de la
	base dédiée aux fonctions de sécurité du serveur dont le nom est
 	mysql. Il y a plusieurs exemples de code SQL dans /bench .
	Notez que la distribution source contient un plus grand nombre d'examples
	que les installations binaires. Dans le répertoire /share se trouvent les messages
	d'erreur du serveur dans chacune des langues supportées. /include and /lib contiennent les en-têtes et les
	bibliothèques de la distribution. Sans surprise,  /bin  contient tous les exécutables,
	dont les plus importants sont: `mysql'
 
      Un shell SQL (utilisant GNU readline). Il peut être utilisé
	en intéractif ou non. `mysqladmin'
 
      Outils d'Administration. Création/Suppression de
	bases. Information sur les processus et les versions. `mysqld'
 
    Le deamon SQL. Il doit s'exécuter de façon
	continue. `mysqlshow'
 
     Consultation d'information concernant une base, une table ou un
	champ. `safe_mysqld'
 
      Lance mysqld. `mysqlaccess'
 
      Script  qui contrôle les droits associés à une combinaison :
	machine, utilisateur et base de donnée. 'mysqlbug'
 
    Utilitaire d'assistance au rapport de bogues trouvés dans le
	serveur. `mysql_install_db'
 
      Crée des tables immenses avec des droits par défaut, il
	est exécuté en général après chaque nouvelle installation. `isamchk'
 
 Contrôle, optimise et corrige les tables. Sécurité Le système de sécurité de MySQL garantit que chaque utilisateur
	ne peut réaliser que les tâches qui lui ont été explicitement
	autorisées (ni plus ni moins). Le système choisit les droits pour une transaction selon
	QUEL UTILISATEUR à partir de 
	QUELLE MACHINE
	est  connectée  à  QUELLE BASE. Le système de permission
	est basé, pourquoi pas, sur le contenu de 3 tables,  USER,
	HOST and  DB de la base  mysql. 
 Les colonnes de ces trois tables sont :Base: mysql 
 
 Table: db
 
 
	
	| Champ | Type | Null | Clé | Défault | Extra |  
	| Host | char(60) |  | PRI |  |  |  
	| Db | char(32) |  | PRI |  |  |  
	| User | char(16) |  | PRI |  |  |  
	| Select_priv | char(1) |  |  | N |  |  
	| Insert_priv | char(1) |  |  | N |  |  
	| Update_priv | char(1) |  |  | N |  |  
	| Delete_priv | char(1) |  |  | N |  |  
	| Create_priv | char(1) |  |  | N |  |  
	| Drop_priv | char(1) |  |  | N |  |  Table: host
 
 
	 
	| Champ | Type | Null | Clé | Défault | Extra |  
	| Host | char(60) |  | PRI |  |  |  
	| Db | char(32) |  | PRI |  |  |  
	| Select_priv | char(1) |  |  | N |  |  
	| Insert_priv | char(1) |  |  | N |  |  
	| Update_priv | char(1) |  |  | N |  |  
	| Delete_priv | char(1) |  |  | N |  |  
	| Create_priv | char(1) |  |  | N |  |  
	| Drop_priv | char(1) |  |  | N |  |  Table: user
 
 
	 
	| Champ | Type | Null | Clé | Défault | Extra |  
	| Host | char(60) |  | PRI |  |  |  
	| User | char(16) |  | PRI |  |  |  
	| Password | char(16) |  |  |  |  |  
	| Select_priv | char(1) |  |  | N |  |  
	| Insert_priv | char(1) |  |  | N |  |  
	| Update_priv | char(1) |  |  | N |  |  
	| Delete_priv | char(1) |  |  | N |  |  
	| Create_priv | char(1) |  |  | N |  |  
	| Drop_priv | char(1) |  |  | N |  |  
	| Reload_priv | char(1) |  |  | N |  |  
	| Shutdown_priv | char(1) |  |  | N |  |  
	| Process_priv | char(1) |  |  | N |  |  
	| File_priv | char(1) |  |  | N |  |  
 On peut choisir d'autoriser ou non les commandes SELECT, INSERT,
	UPDATE, et DELETE pour chaque table. Il est également possible de contrôler l'utilisation de CREATE et de
	DROP (supprimer) sur les tables et les bases. Un autre droit intéressant concerne l'accès access aux commandes
	d'administration  comme shutdown, reload,
	 process, etc. Les permissions en vigueur peuvent être vérifiées avec le script 
	mysqlaccess. Un HOST doit être une machine locale, une adresse IP
	ou une expression SQL. Si la colonne host est laissée vide dans la
	table  db cela signifie  une machine quelconque
	#148; de la table  host. Si par contre c'est dans la table
	#147;host ou user que la colonne host est vide, cela
	ignifie que toutes les machines peuvent étabir une connection TCP
	vec le serveur. Db est le nom de la base de données. Une colonne  USER vide signifie un utilisateur
	quelconque. Premiers pasLa méthode la plus rapide pour démarrer le serveur est de lancer
	la commande suivante : mysql.server  start et pour l'arrêter :
 
 mysql.server stop
 
 La même opération peut être réalisée avec le script safe_mysql,
	comme l'explique le guide d'installation, et d'une façon ou d'une
	autre ces fichiers exécutent le deamon  mysqld. Comme on le comprend facilement, il est nécessaire de lancer le
	serveur avant de réaliser une quelconque opération sur la base ;
	lorsque le serveur est actif, on peut exécuter des commandes comme
	mysqladmin dont la syntaxe est :mysqladmin [OPTIONS] command command 
  où OPTIONS peut être : 
	  -f, --force	Ne demande pas confirmation à l'utilisateur
	pour effacer une table.
 	  -?,
	--help	Affiche ce message d'aide.
	 	  -h, --host=#	Connection au serveur.
	  -p,
	--password[=...]	Mot de passe d'accès au serveur.
	  -P,  --port=...	
	  Numéro de port à utiliser pour la connexion.
	  -S,  --socket=...        
	   Fichier socket à utiliser pour la connexion
	  -u, --user=#	 
	   Nom d'utilisateur pour la connexion si différent de l'utilisateur
	   courant.
	  -V, --version	      
	Affiche des informations sur la version courante du
	serveur. et où command est une ou plusieurs des commandes suivantes
	: 
	create  database_name Crée une nouvelle base.
drop    database_name Supprime la base spécifiée et toutes ses tables.
kill    process_idTue un procesus associé à mysql
processlistAffiche une liste des processus exécuté sur le serveur.
shutdownArrête le serveur
  statusAffiche des informations courantes sur le serveur
version Affiche le numéro de version du serveur
 Par exemple en exécutant :mysqladmin create  newdatabase 
 une nouvelle base nommée "newdatabase" est créée. Nous pouvons voir les processus actifs sur le serveur avec :mysqladmin 	processlist 
  Mysqlshow est une autre commande importante qui affiche la liste
	des bases existantes, et en l'exécutant sans options, on obtient :> mysqlshow 
 
 
	+-----------+
	| Databases |
	+-----------+
	| mysql     |
	| people    |
	| test      |
	+-----------+
 
 Le langage SQL avec MySQLDans l'introduction, nous avons déjà indiqué que ce serveur est
	considéré comme un des plus rapides de sa catégorie pour de grandes et
	des petites quantités de données et nous avons également mentionné que
	ces performances s'expliquaient par l'abandon de certaines
	fonctionnalités du langage SQL qui me paraissent importantes. En
	particulier, les triggers et la logique transactionnelle ont été
	laissés de côtés. Les Triggers ne sont rien d'autres que des courtes portions de
	code qui sont déclenchées (fired), exécutées quand une certaine
	opération est exécutée sur la base (une mise à jour, une
	suppression,...). Evidemment le test des conditions associés aux
	triggers comme leur gestion consomme des ressources  système et c'est
	la seule raison pourquoi ils n'ont pas été implementés. La cohérence des données entre les tables est très importante
	 dans une base de données relationnelle. SQL offre un outil plus
	ou moins simple pour assurer cette cohérence : la 
	"Logique Transactionnnelle". Il revient au serveur de fournir les
	mécanismes de verrouillage de fichiers comme de consolidation et
	de régression de la base. Voilà, MySQL ne supporte pas les transactions
	dans l'objectif d'améliorer la vitesse du serveur (du moins, c'est ce
	 que dit la documentation), la seule assistance disponible est celle 
	des commandes LOCK tables / UNLOCK tables qui nous permettent de verrouiller
	des tables aux autres utilisateurs mais pas d'annuler les opérations réalisées
	sur les données. Connaissant maintenant les limitations du serveur, nous allons passer en revue
	quelques commandes SQL, non pour les analyser elle-même mais pour voir comment le
	serveur les implémente. Après le lancement du serveur, nous sommes prêts à envoyer des requêtes.
	Par exemple, créons une base nommée "people" qui est composée de trois tables
	"clients" "states" "counties". C'est un exemple très simple et pas vraiment utile mais
	il nous donnera une idée de la façon de manipuler les données dans un cas réel.
	Tout d'abord, il faut dire que des opérations sur la base peuvent être réalisés
	de multiples manières : via une API en C, C++, JAVA ou OBDC si nous travaillons
	sous Windows95 (encore une fois pardon), et nous pouvons également
utiliser le shell 	fourni avec la distribution. J'opterai pour cette
dernière solution car elle nous suffira 	et nous évitera des
descriptions spécifiques à un langage dans le cadre de cet article. 
	
	 Le shell Mysql peut être lancé en exécutant :mysql 	databasename 
 
 après avoir obtenu le prompt du shell, nous pouvons commencer à envoyer des commandes
	au serveur. Le shell peut également être utilisé en mode non intéractif par la commande :mysql -e
	(SQL command  
 )databasename 
 qui envoie une requête SQL au serveur. Pour créer la base "people" de notre exemple, nous exécutons
	 la commande :mysqladmin create people 
 
 Puis lançons le shell avec mysql  people 
 
 Maintenant, nous pouvons commencer à lancer des commandes au serveur
	concerné via le shell server, par exemple si l'on souhaite voir la liste des tables
	existantes dans la base :> show tables /g 
 
 le système répond par :  Database: people
 
 
	+-------------+
	|   Tables    |
	+-------------+
	| clients     |
	| counties    |
	|  states     |
	+-------------+
 Toutes les commandes destinées au serveur se terminent par /g lorsqu'elles
	 sont saisies dans le shell, ce dernier reconnait ainsi la fin de la commande et
	 l'envoie au serveur qui réalise le traitement. Naturellement, nous n'aurions pas pu obtenir la réponse
	précédente si nous n'avions pas préalablement créé les tables
	correspondantes avec la  commande CREATE. Une commande CREATE
	typique ressemble à : 
	CREATE TABLE clients
	      (NIF         CHAR(9)   NOT NULL PRIMARY KEY,
	       Name        CHAR(15)  NOT NULL,
	       Family_name CHAR(35)  NOT NULL,
	       Address     CHAR(50)  NOT NULL,
	       City        INT(5)    NOT NULL,
	       State       INT(2)    NOT NULL,
	       Phone       INT(9),
	       Date        DATE      NOT NULL)   /g
	
 
    CREATE TABLE states    
	      (Cod_state           INT(2)   NOT NULL PRIMARY KEY,
	       Description_s       CHAR(30) NOT NULL)   /g
	
 
    CREATE TABLE counties  
	      (Cod_state           INT(2)    NOT NULL,
	       Cod_county          INT(3)    NOT NULL,
	       Description_c       CHAR(30)  NOT NULL,
	          PRIMARY KEY(Cod_state,Cod_county)) /g          
 Si ensuite nous lançons :> show colums from
	 clients from people   /g > show columns
	from states  from people   /g
 > show columns from
	 counties  from people   /g
 
 
 nous obtenons : 
Database: people   	Table: clients   Rows: 4
+--------------+----------+------+-----+---------+-------+
| Field        | Type     | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| NIF          | char(9)  |      |PRI  |         |       |
| Name         | char(15) | YES  |     |         |       |
| Family_name  | char(35) |      |     |         |       |
| Address      | char(50) |      |     |         |       |
| City         | int(5)   |      |     |   0     |       |
| State        | int(2)   |      |     |   0     |       |
| Phone        | int(9)   | YES  |     |         |       |
| Date         | date     | YES  |     |         |       |
+--------------+----------+------+-----+---------+-------+
 
Database: people   	Table: states      Rows: 3
+-----------------+----------+------+-----+---------+-------+
| Field           | Type     | Null | Key| Default  | Extra |
+-----------------+----------+------+-----+---------+-------+
| Cod_state       | int(2)   |      | PRI |    0    |       |
| Descripcion_s   | char(30) |      |     |         |       |
+-----------------+----------+------+-----+---------+-------+
 
Database: people   	Table: counties    Rows: 9
+------------------+----------+------+-----+---------+-------+
| Field            | Type     | Null | Key| Default  | Extra |
+------------------+----------+------+-----+---------+-------+
| Cod_state        | int(2)   |      | PRI |   0     |       |
| Cod_county       |  int(3)  |      | PRI |   0     |       |
| Descripcion_c    | char(30) |      |     |         |       |
+------------------+----------+------+-----+---------+-------+
 Après cela, nous pourrions commencer à insérer des
	données dans chacune des tables. Utilisons la commande SQL
	INSERT indépendemment de tout autre langage de programmation
	ou API :  Pour insérer un enregistrement dans les tables clients, counties et
	states, exécutons : 
	INSERT INTO clients
	VALUES
	("5316828K","PEDRO","ROMERO
	DIAZ","C/ HOLA 9   ",29003,29,911111111,19980203)  
	/g
	
 INSERT INTO counties
	VALUES
	(28,001,"Fuenlabrada")
	 /g
	
 INSERT INTO states
	VALUES
	(08,"Barcelona")
	 /g
	
 Pour conclure cette aperçu des commandes SQL, nous allons
	retrouver les lignes que  nous avons insérées dans les tables
	de la base courante. Commençons par rechercher les enregistrements de
	la table clients qui vérifient une condition, d'abord sur la table
	counties 	: >   SELECT ALL
	Cod_state, Cod_county, Description_c from counties
	       where Cod_state	= 28    /g 
 
Cod_state	Cod_county	Description_c
28              1               Fuenlabrada
28              2               Pozuelo
28              3               Madrid
>  SELECT ALL
	NIF,Name,Family_name,Address from clientes
	       where City =
	28001 
        
	NIF        	Name  
		Family_name 	                           direccion
	2416728U	JOSE	FERNANDEZ 
	ROMERO	C/ FELIZ 1 3G
	
 
    > SELECT ALL
	
NIF,Name,Family_name,Address from clients
	       where State  =
	29
	 
	
 
NIF        Name           Family_name           Address   
23198623N  JUAN ANDRES    RUIZ MORALES          C/ CATEDRAL 12 2B
5316828K   PEDRO          ROMERO DIAZ           C/ HOLA 9
52312844J  LUIS ALBERTO   LISTO JIMENEZ         C/ ROSA DE LOS VIENTOS 129  3I  
 ConclusionsNous avons ouvert cet article en expliquant que notre sujet
	consistait à montrer les principales caractéristiques d'un serveur
	SQL particulier, que nous ne voulions pas transformer ce texte en une
	liste de recettes de cuisine et de commandes pour MySQL. Au lieu de
	cela, nous voulions étudier les fonctionnalités et les limitations de
	ce logiciel. Ce n'est qu'en connaissant en profondeur ce genre
	d'application que l'on peut vraiment profiter de toutes les
	fonctionnalités qu'elle propose. MySQL ne dispose pas d'implémentation
	des triggers et de la logique transactionnelle, ce qui rend la
	gestion des données (insertions, mises à jour, suppressions
	d'enregistrements) très complexes dans le cas d'applications multi-utilisateurs
	utilisant de nombreuses tables interdépendantes. Néanmoins, je
	recommande ce serveur pour des applications nécessitant des accès très
	rapides à de grandes bases de données. Pour conclure, je souhaite mentionner que la plupart des
	informations de cet article proviennent de la documentation de MySQL
	incluse dans la distribution, de plusieurs articles de la presse
	spécialisée ainsi que d'un manuel SQL d'IBM déjà jaunissant. |