Table des matières
MyISAM
[+/-]MERGE
[+/-]MEMORY
(HEAP
)BDB
ou BerkeleyDB
[+/-]BDB
BDB
BDB
BDB
BDB
dans un futur
proche :BDB
BDB
EXAMPLE
FEDERATED
[+/-]ARCHIVE
CSV
ISAM
MySQL supporte plusieurs moteurs de stockage, qui gère différents types de tables. Les moteurs de tables MySQL peuvent être transactionnels ou non-transactionnels.
Le moteur de tables originale était ISAM
,
qui gérait des tables non-transactionnelles. Ce moteur a été
remplacé par le moteur MyISAM
et ne doit
plus être utilisé. Il est abandonné et ne doit plus être
utilisé. depuis MySQL 4.1, et il sera supprimé en MySQL 5.0.
En MySQL 3.23.0, les moteurs MyISAM
et
HEAP
ont été introduits.
MyISAM
est une version améliorée de
ISAM
. Le moteur HEAP
propose des tables stockées en mémoire. Le moteur
MERGE
a été ajouté en MySQL 3.23.25. Il
permet le regroupement de tables MyISAM
identiques sous la forme d'une seule table. Tous les trois
moteurs sont non transactionnels, et sont tous inclus par
défaut. Notez que le moteur HEAP
est
maintenant appelé MEMORY
.
Les moteurs InnoDB
et BDB
gèrent des tables transactionnelles, et ont été introduits en
MySQL 3.23. Les deux font partie de la distribution source de
MySQL 3.23.34a. BDB
est inclus dans les
distributions MySQL-Max
pour les systèmes
d'exploitation qui le supportent. InnoDB
est
aussi inclus dans les distributions binaires
MySQL-Max
de MySQL 3.23. Depuis MySQL 4.0,
InnoDB
est inclus par défaut dans toutes les
distributions binaires. Dans les distributions source, vous
pouvez l'activer ou pas en configurant la compilation.
NDBCluster
est le moteur de stockage du
cluster MySQL qui implémente des tables réparties sur
plusieurs serveurs. Il est disponible avec les distributions
source depuis MySQL 4.1.2.
Ce chapitre décrit les différents moteurs de tables MySQL, hormis
InnoDB
, qui est présenté dans le chapitre
Chapitre 15, Le moteur de tables InnoDB
et NDBCluster
qui est
présenté dans le chapitre Chapitre 16, Introduction à MySQL Cluster.
Lorsque vous créez une table, vous pouvez indiquer à MySQL le type
de table avec la clause ENGINE
ou
TYPE
lors de la commande de CREATE
TABLE
:
CREATE TABLE t (i INT) ENGINE = INNODB; CREATE TABLE t (i INT) TYPE = MEMORY;
ENGINE
est le terme recommandé, mais il ne peut
pas être utilisé avant MySQL 4.0.18. TYPE
est
disponible depuis MySQL 3.23.0, la première version de MySQL qui
dispose de plusieurs moteurs de tables.
Si vous omettez l'option ENGINE
ou
TYPE
, le type de table par défaut sera utilisé.
C'est généralement MyISAM
. Cela peut être
changé en modifiant la variable système
table_type
.
Pour convertir une table d'un type à l'autre, utilisez la commande
ALTER TABLE
, pour indiquer le nouveau type :
ALTER TABLE t ENGINE = MYISAM; ALTER TABLE t TYPE = BDB;
See Section 13.2.5, « Syntaxe de CREATE TABLE
» and
Section 13.2.2, « Syntaxe de ALTER TABLE
».
Si vous essayez d'utiliser un moteur de stockage qui n'est pas
compilé ou qui est désactivé, MySQL créera une table de type
MyISAM
. Ce comportement est pratique pour copier
des tables entre serveurs MySQL qui supportent différents moteurs.
Par exemple, dans une architecture de réplication, votre serveur
maître supporte des tables transactionnelles, mais l'esclave
n'utilise que des tables non-transactionnelles, pour améliorer la
vitesse.
Cette substitution automatique par une table de type
MyISAM
pour un type de moteur indisponible peut
être gênant pour un nouvel utilisateur MySQL. En MySQL 4.1 et plus
récent, une alerte est générée lorsque le type de la table est
modifié.
MySQL crée toujours un fichier .frm
pour
stocker le type de la table et les informations de définition. Les
données et les index de la table peuvent être stockés ailleurs,
en fonction du type de tables. Le serveur crée le fichier
.frm
par dessus le moteur de stockage. Les
moteurs peuvent créer des fichiers supplémentaires, en fonction de
leurs besoins.
Les avantages des tables transactionnelles (TST) sont :
Plus sûr. Même si MySQL crashe ou que vous avez un problème matériel, vous pouvez récupérer vos données, soit par un recouvrement automatique, soit à partir d'une sauvegarde combinée avec le log des transactions.
Vous pouvez combiner plusieurs commandes et les accepter toutes
d'un seul coup avec la commande COMMIT
.
Vous pouvez utiliser ROLLBACK
pour ignorer
vos modifications (si vous n'êtes pas en mode auto-commit).
Si une mise à jour échoue, tout vos changements seront annulés. (Avec les tables NTST tous les changements opérés sont permanents)
Gère mieux les accès concurrents si la table re¸oit simultanément plusieurs lectures.
Notez que pour utiliser le moteur InnoDB
en MySQL
3.23, vous devez configurer au moins l'option de démarrage
innodb_data_file_path
. En 4.0 et plus récent,
InnoDB
utilise les valeurs par défaut de la
configuration, si vous ne les spécifiez pas. See
Section 15.4, « Configuration InnoDB
».
Avantages des tables non-transactionnelles (NTST) :
Plus rapides
Utilisent moins d'espace disque
Utilisent moins de mémoire pour exécuter les mises à jour.
Vous pouvez combiner les tables TST et NTST dans la même requête pour obtenir le meilleur des deux types. Cependant, dans une transaction sans auto-validation, les modifications à une table non-transactionnelles seront toujours immédiatement enregistrés, et ne pourront pas être annulé.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.