Inhaltsverzeichnis
INFORMATION_SCHEMA SCHEMATA
INFORMATION_SCHEMA TABLES
INFORMATION_SCHEMA COLUMNS
INFORMATION_SCHEMA STATISTICS
INFORMATION_SCHEMA USER_PRIVILEGES
INFORMATION_SCHEMA SCHEMA_PRIVILEGES
INFORMATION_SCHEMA TABLE_PRIVILEGES
INFORMATION_SCHEMA COLUMN_PRIVILEGES
INFORMATION_SCHEMA CHARACTER_SETS
INFORMATION_SCHEMA COLLATIONS
INFORMATION_SCHEMA
COLLATION_CHARACTER_SET_APPLICABILITY
INFORMATION_SCHEMA TABLE_CONSTRAINTS
INFORMATION_SCHEMA KEY_COLUMN_USAGE
INFORMATION_SCHEMA ROUTINES
INFORMATION_SCHEMA VIEWS
INFORMATION_SCHEMA TRIGGERS
INFORMATION_SCHEMA PLUGINS
INFORMATION_SCHEMA ENGINES
INFORMATION_SCHEMA PARTITIONS
INFORMATION_SCHEMA EVENTS
INFORMATION_SCHEMA
-TabellenSHOW
-Anweisungen
INFORMATION_SCHEMA
gibt Zugriff auf
Datenbank-Metadaten.
Metadaten sind Informationen über Daten, also beispielsweise der Name einer Datenbank oder Tabelle, der Datentyp einer Spalte, oder Zugriffsberechtigungen. Manchmal werden diese Informationen auch als Data Dictionary oder Systemkatalog bezeichnet.
INFORMATION_SCHEMA
ist die Informationsdatenbank,
also der Ort, an dem Informationen über alle anderen auf dem
betreffenden MySQL Server gepflegten Datenbanken gespeichert werden.
Im INFORMATION_SCHEMA
gibt es eine Reihe von
schreibgeschützten Tabellen. Da diese in Wirklichkeit keine
Basistabellen, sondern Views sind, werden Sie keine Dateien sehen,
die mit ihnen verbunden sind.
Ein Beispiel:
mysql>SELECT table_name, table_type, engine
->FROM information_schema.tables
->WHERE table_schema = 'db5'
->ORDER BY table_name DESC;
+------------+------------+--------+ | table_name | table_type | engine | +------------+------------+--------+ | v56 | VIEW | NULL | | v3 | VIEW | NULL | | v2 | VIEW | NULL | | v | VIEW | NULL | | tables | BASE TABLE | MyISAM | | t7 | BASE TABLE | MyISAM | | t3 | BASE TABLE | MyISAM | | t2 | BASE TABLE | MyISAM | | t | BASE TABLE | MyISAM | | pk | BASE TABLE | InnoDB | | loop | BASE TABLE | MyISAM | | kurs | BASE TABLE | MyISAM | | k | BASE TABLE | MyISAM | | into | BASE TABLE | MyISAM | | goto | BASE TABLE | MyISAM | | fk2 | BASE TABLE | InnoDB | | fk | BASE TABLE | InnoDB | +------------+------------+--------+ 17 rows in set (0.01 sec)
Erklärung: Die Anweisung verlangt eine Liste aller Tabellen der
Datenbank db5
in umgekehrter alphabetischer
Reihenfolge, wobei jeweils nur drei Informationen angezeigt werden
sollen: der Name der Tabelle, ihr Typ und ihre Speicher-Engine.
Jeder MySQL-Benutzer hat das Recht, auf diese Tabellen zuzugreifen, allerdings nur auf diejenigen Tabellenzeilen, die sich auf Objekte beziehen, für welche er die richtigen Zugriffsberechtigungen hat.
Die Anweisung SELECT ... FROM INFORMATION_SCHEMA
ist als ein konsistenteres Mittel gedacht, Zugriff auf die
Informationen zu gewähren, welche die verschiedenen von MySQL
unterstützten SHOW
-Anweisungen geben
(SHOW DATABASES
, SHOW TABLES
usw.). Die Verwendung von SELECT
hat im Vergleich
zu SHOW
folgende Vorteile:
Sie entspricht den Codd'schen Regeln: Jeglicher Zugriff geht auf Tabellen.
Niemand muss eine neue Anweisungssyntax lernen. Da jeder bereits
weiß, wie SELECT
funktioniert, müssen
lediglich die Objektnamen gelernt werden.
Der Implementierer muss sich nicht um Schlüsselwörter Gedanken machen.
Es sind Millionen Varianten für die Ausgabe möglich, nicht nur eine. So erhält man mehr Flexibilität für Anwendungen, die immer wieder andere Metadaten benötigen.
Die Migration ist einfacher, da auch alle anderen DBMS so arbeiten.
Da jedoch SHOW
bei den Angestellten und Nutzern
von MySQL so beliebt ist und eine Abschaffung dieser Anweisung
Verwirrung stiften könnte, genügen die Vorteile der
konventionellen Syntax nicht als Grund, auf SHOW
ganz zu verzichten. Stattdessen gibt es sogar Verbesserungen an
SHOW
in MySQL 5.1. Diese werden in
Abschnitt 22.22, „Erweiterungen der SHOW
-Anweisungen“, genauer beschrieben.
Es gibt keinen Unterschied zwischen den Berechtigungen, die für
SHOW
-Anweisungen erforderlich sind, und jenen,
die zur Datenabfrage aus dem INFORMATION_SCHEMA
benötigt werden. In beiden Fällen müssen Sie irgendeine
Berechtigung für ein Objekt besitzen, um Informationen über es
anzeigen zu lassen.
Die Implementierung der
INFORMATION_SCHEMA
-Tabellenstrukturen in MySQL
entspricht dem ANSI/ISO SQL:2003-Standard Teil 11
Schemata. Unser Ziel ist es, möglichst
weitgehend dem SQL:2003-Core-Feature F021 Basic
information schema zu entsprechen.
Benutzer von SQL Server 2000 (auch dieses System befolgt den
Standard) werden vielleicht starke Ähnlichkeiten bemerken.
Allerdings hat MySQL viele Spalten weggelassen, die für unsere
Implementierung keine Rolle spielen, und stattdessen andere,
MySQL-spezifische Spalten hinzugefügt. Dazu gehört die Spalte
ENGINE
in der Tabelle
INFORMATION_SCHEMA.TABLES
.
Zwar verwenden die anderen DBMS unterschiedliche Namen, wie etwa
syscat
oder system
, aber der
Standardname lautet INFORMATION_SCHEMA
.
Letztlich haben wir eine Datenbank namens
INFORMATION_SCHEMA
vor uns, auch wenn der Server
kein Datenbankverzeichnis hierfür anlegt. Es ist möglich,
INFORMATION_SCHEMA
mit einer
USE
-Anweisung als Standarddatenbank einzustellen,
allerdings können die Tabelleninhalte nur gelesen werden.
Einfügungen, Änderungen oder Löschungen in den Tabellen sind
ausgeschlossen.
Die folgenden Abschnitte beschreiben die Tabellen und Spalten von
INFORMATION_SCHEMA
. Zu jeder Spalte gibt es drei
Informationen:
Der „Standard Name“ gibt den SQL-Standardnamen der Spalte an.
„SHOW
name“ ist der
entsprechende Feldname in der nächstgelegenen
SHOW
-Anweisung (sofern vorhanden).
„Remarks“ sind eventuelle Zusatzinformationen. Wenn
dieses Feld den Wert NULL
hat, bedeutet dies,
dass der Wert der Spalte immer NULL
lautet.
Um keine Namen zu verwenden, die im Standard oder in DB2, SQL Server
oder Oracle reserviert sind, haben wir die Namen der als
„MySQL extension“ markierten Spalten geändert. (So
wurde beispielsweise in der Tabelle TABLES
aus
COLLATION
eine
TABLE_COLLATION
.) Siehe auch die Liste der
reservierten Wörter am Ende dieses Artikels:
http://www.dbazine.com/gulutzan5.shtml.
Die Definition für Zeichenspalten (beispielsweise
TABLES.TABLE_NAME
) ist im Allgemeinen
VARCHAR(
, wobei N
) CHARACTER SET
utf8N
mindestens 64
ist.
Jeder Abschnitt gibt an, welche SHOW
-Anweisung
einer SELECT
-Anweisung entspricht, die
Informationen aus dem INFORMATION_SCHEMA
abfragt,
sofern eine solche Anweisung existiert.
Hinweis: Zurzeit fehlen noch einige Spalten und andere stehen in der verkehrten Reihenfolge. Wir arbeiten daran und werden die Dokumentation bei Änderungen aktualisieren.
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.