Inhaltsverzeichnis
MyISAM
-Speicher-Engine [+/-]InnoDB
-Tabellen [+/-]InnoDB
: Startoptionen und SystemvariablenInnoDB
-Tabellen erzeugenInnoDB
-DatenbankInnoDB
-FehlerbehandlungInnoDB
-TabellenInnoDB
-TroubleshootingMERGE
-Speicher-Engine [+/-]MEMORY
-Speicher-EngineBDB
-Speicher-Engine [+/-]EXAMPLE
-Speicher-EngineFEDERATED
-Speicher-Engine [+/-]ARCHIVE
-Speicher-EngineCSV
-Speicher-EngineBLACKHOLE
-Speicher-EngineMySQL unterstützt mehrere Speicher-Engines für die Arbeit mit unterschiedlichen Tabellentypen. MySQL kennt Speicher-Engines sowohl für transaktionssichere als auch für nicht-transaktionssichere Tabellen:
Mit MyISAM
werden nicht-transaktionssichere
Tabellen verwaltet. Dieser Tabellentyp kann Daten sehr schnell
speichern und abrufen und bietet Volltext-Suchfähigkeiten.
MyISAM
wird in allen MySQL-Konfigurationen
unterstützt und ist als Standard-Tabellentyp voreingestellt,
sofern Sie in MySQL keinen anderen Default konfiguriert haben.
Die Speicher-Engine MEMORY
stellt Tabellen im
Arbeitsspeicher zur Verfügung. Mit der Speicher-Egnine
MERGE
lassen sich mehrere identische
MyISAM
-Tabellen wie eine einzige behandeln.
WieMyISAM
verwalten auch die Speicher-Engines
MEMORY
und MERGE
nicht-transaktionssichere Tabellen. Beide sind ebenfalls
standardmäßig in MySQL enthalten.
Note: Die Speicher-Engine
MEMORY
hieß früher HEAP
.
Die Speicher-Engines InnoDB
und
BDB
stellen transaktionssichere Tabellen zur
Verfügung. BDB
ist in den
Binärdistributionen von MySQL-Max für Betriebssysteme, die
dieses unterstützen, enthalten. Außerdem ist
InnoDB
Standardbestandteil aller MySQL
5.1-Binärdistributionen. In Quelldistributionen
können Sie diese Engines aktivieren oder deaktivieren, indem
Sie MySQL nach Ihren Wünschen konfigurieren.
Die Speicher-Engine EXAMPLE
ist ein
„Sockel“-Modul, das eigentlich gar nichts tut. Sie
können mit ihr zwar Tabellen anlegen, aber keine Daten
speichern oder abrufen. Sie soll lediglich im MySQL-Quellcode
als Beispiel zu dienen, um zu zeigen, wie man neue
Speicher-Engines schreibt. Daher ist sie vor allem für
Entwickler von Interesse.
NDB Cluster
wird von MySQL Cluster als
Speicher-Engine zur Implementierung von Tabellen genutzt, die
über viele Computer partitioniert sind. Sie steht in den
MySQL-Max 5.1- Binärdistributionen zur Verfügung.
Dieses Speicher-Engine wird zurzeit nur von Linux, Solaris und
Mac OS X unterstützt. In zukünftigen MySQL-Releases soll sie
auch auf anderen Plattformen, wie etwa Windows, unterstützt
werden.
Die Speicher-Engine ARCHIVE
dient der
Speicherung großer Datenmengen ohne Indizes mit einem sehr
kleinen Speicherverbrauch.
Die Speicher-Engine CSV
speichert Daten in
Textdateien in Form von kommagetrennten Werten.
Die Speicher-Engine BLACKHOLE
nimmt Daten
entgegen, speichert sie jedoch nicht. Abfragen liefern immer
eine leere Menge zurück.
Die Speicher-Engine FEDERATED
speichert Daten
in einer Remote-Datenbank. Gegenwärtig funktioniert sie nur mit
MySQL unter Verwendung der MySQL-C-Client-API. In zukünftigen
Releases soll sie auch mit anderen Datenquellen mit anderen
Treibern oder Client-Verbindungsmethoden funktionieren.
In diesem Kapitel werden die Speicher-Engines von MySQL beschrieben.
Eine Ausnahme bildet die Engine NDB Cluster
, die
in Kapitel 16, MySQL Cluster behandelt wird.
Wenn Sie eine neue Tabelle anlegen, können Sie die zu verwendende
Speicher-Engine angeben, indem Sie der CREATE
TABLE
-Anweisung die Tabellenoption
ENGINE
oder TYPE
hinzufügen:
CREATE TABLE t (i INT) ENGINE = INNODB; CREATE TABLE t (i INT) TYPE = MEMORY;
Der ältere Begriff TYPE
wird aus Gründen der
Abwärtskompatibilität noch als Synonym für
ENGINE
akzeptiert, doch ENGINE
ist der aktuelle Begriff, während TYPE
mittlerweile veraltet ist.
Wenn Sie die Option ENGINE
oder
TYPE
weglassen, wird die Standard-Speicher-Engine
verwendet. Normalerweise ist dies MyISAM
, doch
mit der Server-Startoption --default-storage-engine
oder --default-table-type
oder der Systemvariablen
storage_engine
oder table_type
können Sie auch etwas anderes einstellen.
Wird MySQL unter Windows mit dem MySQL Configuration Wizard
installiert, kann die Speicher-Engine InnoDB
anstelle der standardmäßigen MyISAM
-Engine
gewählt werden. Siehe
Abschnitt 2.3.5.6, „Der Dialog zur Datenbankverwendung“.
Um eine Typkonvertierung von Tabellen vorzunehmen, geben Sie in
einer ALTER TABLE
-Anweisung den neuen Typ an:
ALTER TABLE t ENGINE = MYISAM; ALTER TABLE t TYPE = BDB;
Siehe Abschnitt 13.1.5, „CREATE TABLE
“ und
Abschnitt 13.1.2, „ALTER TABLE
“.
Wenn Sie eine Speicher-Engine zu verwenden versuchen, die entweder
gar nicht kompiliert oder zwar kompiliert, aber deaktiviert ist,
legt MySQL stattdessen mit der Standard-Speicher-Engine eine Tabelle
an, also normalerweise mit MyISAM
. Dieses
Verhalten ist praktisch, wenn Tabellen zwischen MySQL-Servern hin-
und herkopiert werden, die verschiedene Speicher-Engines
unterstützen. (So könnte beispielsweise in einer Replikation Ihr
Masterserver aus Sicherheitsgründen transaktionssichere
Speicher-Engines verwenden, während die Slaveserver aus Gründen
der Schnelligkeit nur nicht-transaktionssichere einsetzen.)
Dass MySQL für Speicher-Engines, die nicht zur Verfügung stehen, automatisch die Standard-Speicher-Engine einsetzt, kann für Neulinge verwirrend sein. Es wird jedoch in einem solchen Fall immer eine Warnung ausgegeben.
Für neue Tabellen legt MySQL immer eine
.frm
-Datei zur Speicherung der Tabellen- und
Spaltendefinitionen an. Der Index und die Daten der Tabelle können
je nach Speicher-Engine in einer oder mehreren Dateien gespeichert
sein. Der Server erstellt die .frm
-Datei über
der Ebene der Speicher-Engine. Einzelne Speicher-Engines legen
zusätzliche Dateien an, die für die von ihnen verwalteten Tabellen
erforderlich sind.
Eine Datenbank kann unterschiedliche Tabellentypen enthalten; die Tabellen müssen also nicht alle mit derselben Speicher-Engine angelegt werden.
Transaktionssichere Tabellen (TSTs) haben gegenüber den nicht-transaktionssicheren (NTSTs) mehrere Vorteile:
Sie sind sicherer. Selbst wenn MySQL abstürzt oder Hardware-Probleme auftreten, bekommen Sie Ihre Daten auf jeden Fall zurück, sei es durch die automatische Wiederherstellung, sei es aus einer Sicherungskopie plus dem Transaktionslog.
Sie können viele Anweisungen miteinander kombinieren und mit
der COMMIT
-Anweisung später alle
gleichzeitig festschreiben (wenn Autocommit deaktiviert wurde).
Sie können Ihre Änderungen mit einem
ROLLBACK
verwerfen (wenn Autocommit
deaktiviert wurde).
Schlägt ein Update fehl, werden alle Ihre Änderungen rückgängig gemacht. (Bei nicht-transaktionssicheren Tabellen sind alle einmal stattgefundenen Änderungen von Dauer.)
Transaktionssichere Speicher-Engines bieten bessere Nebenläufigkeit für Tabellen, in denen gleichzeitig mit Lese-Operationen viele Änderungen stattfinden.
Sie können transaktionssichere und nicht-transaktionssichere
Tabellen in derselben Anweisung verwenden, um aus beiden das Beste
herauszuholen. Allerdings sollten Sie nicht bei ausgeschaltetem
Autocommit verschiedene Speicher-Engines durcheinanderwürfeln, auch
wenn MySQL mehrere transaktionssichere Engines unterstützt, um die
bestmöglichen Ergebnisse zu erzielen. Denn wenn Sie die Engines
vermischen, werden Änderungen an nicht-transaktionssicheren
Tabellen weiterhin festgeschrieben und können nicht mehr
zurückgerollt werden. Informationen zu diesem und anderen
Problemen, die in Transaktionen mit einem Mix von Speicher-Engines
auftreten können, finden Sie unter Abschnitt 13.4.1, „BEGIN/COMMIT/ROLLBACK
“.
Nicht-transaktionssichere Tabellen haben mehrere Vorteile, die alle damit zusammenhängen, dass der Aufwand von Transaktionen entfällt:
Viel schneller
Weniger Speicherbedarf auf der Festplatte
Weniger Arbeitsspeicherbedarf für Updates
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.