Inhaltsverzeichnis
INFORMATION_SCHEMA SCHEMATAINFORMATION_SCHEMA TABLESINFORMATION_SCHEMA COLUMNSINFORMATION_SCHEMA STATISTICSINFORMATION_SCHEMA USER_PRIVILEGESINFORMATION_SCHEMA SCHEMA_PRIVILEGESINFORMATION_SCHEMA TABLE_PRIVILEGESINFORMATION_SCHEMA COLUMN_PRIVILEGESINFORMATION_SCHEMA CHARACTER_SETSINFORMATION_SCHEMA COLLATIONSINFORMATION_SCHEMA
COLLATION_CHARACTER_SET_APPLICABILITYINFORMATION_SCHEMA TABLE_CONSTRAINTSINFORMATION_SCHEMA KEY_COLUMN_USAGEINFORMATION_SCHEMA ROUTINESINFORMATION_SCHEMA VIEWSINFORMATION_SCHEMA TRIGGERSINFORMATION_SCHEMA PLUGINSINFORMATION_SCHEMA ENGINESINFORMATION_SCHEMA PARTITIONSINFORMATION_SCHEMA EVENTSINFORMATION_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.
Da ein Schema eine Datenbank ist, liefert die Tabelle
SCHEMATA Informationen über Datenbanken.
| Standard Name | SHOW name | Remarks |
CATALOG_NAME | - | NULL |
SCHEMA_NAME | Database | |
DEFAULT_CHARACTER_SET_NAME | ||
DEFAULT_COLLATION_NAME | ||
SQL_PATH | NULL |
Die folgenden Anweisungen sind äquivalent:
SELECT SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA [WHERE SCHEMA_NAME LIKE 'wild'] SHOW DATABASES [LIKE 'wild']
Die Tabelle TABLES informiert über die
Tabellen in der Datenbank.
| Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | Table_... | |
TABLE_NAME | Table_... | |
TABLE_TYPE | ||
ENGINE | Engine | MySQL extension |
VERSION | Version | MySQL extension |
ROW_FORMAT | Row_format | MySQL extension |
TABLE_ROWS | Rows | MySQL extension |
AVG_ROW_LENGTH | Avg_row_length | MySQL extension |
DATA_LENGTH | Data_length | MySQL extension |
MAX_DATA_LENGTH | Max_data_length | MySQL extension |
INDEX_LENGTH | Index_length | MySQL extension |
DATA_FREE | Data_free | MySQL extension |
AUTO_INCREMENT | Auto_increment | MySQL extension |
CREATE_TIME | Create_time | MySQL extension |
UPDATE_TIME | Update_time | MySQL extension |
CHECK_TIME | Check_time | MySQL extension |
TABLE_COLLATION | Collation | MySQL extension |
CHECKSUM | Checksum | MySQL extension |
CREATE_OPTIONS | Create_options | MySQL extension |
TABLE_COMMENT | Comment | MySQL extension |
Hinweise:
TABLE_SCHEMA und
TABLE_NAME sind in einer
SHOW-Anzeige ein einziges Feld,
beispielsweise Table_in_db1.
Der TABLE_TYPE sollte BASE
TABLE oder VIEW sein. Wenn die
Tabelle eine temporäre ist, ist TABLE_TYPE
= TEMPORARY. (Da es keine temporären Views
gibt, ist dies eindeutig.)
Die Spalte TABLE_ROWS ist
NULL, wenn die Tabelle in der
INFORMATION_SCHEMA-Datenbank vorliegt. Bei
InnoDB-Tabellen ist die Zeilenzahl nur eine
ungefähre Schätzung, die für die SQL-Optimierung benötigt
wird.
Es ist kein Standardzeichensatz der Tabelle vorgegeben, doch
TABLE_COLLATION kommt einem
Standardzeichensatz nahe, da die Namen von Kollationen mit dem
Namen eines Zeichensatzes anfangen.
Die folgenden Anweisungen sind äquivalent:
SELECT table_name FROM INFORMATION_SCHEMA.TABLES [WHERE table_schema = 'db_name'] [WHERE|AND table_name LIKE 'wild'] SHOW TABLES [FROMdb_name] [LIKE 'wild']
Die Tabelle COLUMNS informiert über die
Spalten der Tabellen.
| Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | Field | |
ORDINAL_POSITION | see notes | |
COLUMN_DEFAULT | Default | |
IS_NULLABLE | Null | |
DATA_TYPE | Type | |
CHARACTER_MAXIMUM_LENGTH | Type | |
CHARACTER_OCTET_LENGTH | ||
NUMERIC_PRECISION | Type | |
NUMERIC_SCALE | Type | |
CHARACTER_SET_NAME | ||
COLLATION_NAME | Collation | |
COLUMN_TYPE | Type | MySQL extension |
COLUMN_KEY | Key | MySQL extension |
EXTRA | Extra | MySQL extension |
COLUMN_COMMENT | Comment | MySQL extension |
Hinweise:
In der SHOW-Anweisung werden unter
Type Werte von mehreren verschiedenen
COLUMNS-Spalten wiedergegeben.
ORDINAL_POSITION is notwendig, da Sie
vielleicht eines Tages ORDER BY
ORDINAL_POSITION verwenden werden. Im Gegensatz zu
SHOW verwendet ein
SELECT keine automatische Reihenfolge.
CHARACTER_OCTET_LENGTH sollte gleich
CHARACTER_MAXIMUM_LENGTH sein, außer bei
Multibytezeichensätzen.
CHARACTER_SET_NAME kann von
Collation abgeleitet werden. Wenn Sie
beispielsweise SHOW FULL COLUMNS FROM t
verlangen und in der Collation-Spalte den
Wert latin1_swedish_ci entdecken, ist der
Zeichensatz das, was vor dem ersten Unterstrich steht:
latin1.
Die folgenden Anweisungen sind nahezu äquivalent:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] [AND column_name LIKE 'wild'] SHOW COLUMNS FROMtbl_name[FROMdb_name] [LIKE 'wild']
Die STATISTICS-Tabelle liefert Ihnen
Informationen über Tabellenindizes.
| Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | = Database | |
TABLE_NAME | Table | |
NON_UNIQUE | Non_unique | |
INDEX_SCHEMA | = Database | |
INDEX_NAME | Key_name | |
SEQ_IN_INDEX | Seq_in_index | |
COLUMN_NAME | Column_name | |
COLLATION | Collation | |
CARDINALITY | Cardinality | |
SUB_PART | Sub_part | MySQL extension |
PACKED | Packed | MySQL extension |
NULLABLE | Null | MySQL extension |
INDEX_TYPE | Index_type | MySQL extension |
COMMENT | Comment | MySQL extension |
Hinweise:
Eine Standardtabelle für Indizes gibt es nicht. Die obige
Liste entspricht dem, was SQL Server 2000 als
sp_statistics zurückliefert, nur dass wir
den Namen QUALIFIER durch
CATALOG und OWNER durch
SCHEMA ersetzt haben.
Es ist offensichtlich, dass die obige Tabelle und die Ausgabe
von SHOW INDEX dieselbe Abstammung haben.
Daher besteht bereits eine enge Korrelation.
Die folgenden Anweisungen sind äquivalent:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] SHOW INDEX FROMtbl_name[FROMdb_name]
Die Tabelle USER_PRIVILEGES informiert über
globale Berechtigungen. Diese Information stammt aus der
Berechtigungstabelle mysql.user.
| Standard Name | SHOW name | Remarks |
GRANTEE | '
value | |
TABLE_CATALOG | NULL | |
PRIVILEGE_TYPE | ||
IS_GRANTABLE |
Hinweis:
Dies ist keine Standardtabelle. Sie entnimmt ihre Werte der
Tabelle mysql.user.
Die Tabelle SCHEMA_PRIVILEGES liefert
Informationen über Schema-(Datenbank-)Berechtigungen. Diese
Informationen stammen aus der Berechtigungstabelle
mysql.db.
| Standard Name | SHOW name | Remarks |
GRANTEE | '
value | |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
PRIVILEGE_TYPE | ||
IS_GRANTABLE |
Hinweis:
Dies ist ebenfalls keine Standardtabelle. Ihre Werte erhält
sie aus der Tabelle mysql.db.
Die Tabelle TABLE_PRIVILEGES liefert
Informationen über Tabellenberechtigungen.
Diese Informationen stammen aus der Berechtigungstabelle
mysql.tables_priv.
| Standard Name | SHOW name | Remarks |
GRANTEE | '
value | |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
PRIVILEGE_TYPE | ||
IS_GRANTABLE |
Die folgenden Anweisungen sind nicht äquivalent:
SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES SHOW GRANTS ...
Der PRIVILEGE_TYPE kann einen (und nur einen)
der folgenden Werte annehmen: SELECT,
INSERT, UPDATE,
REFERENCES, ALTER,
INDEX, DROP, CREATE
VIEW.
Die COLUMN_PRIVILEGES-Tabelle liefert
Informationen über Spaltenberechtigungen. Diese Informationen
entstammen der Berechtigungstabelle
mysql.columns_priv.
| Standard Name | SHOW name | Remarks |
GRANTEE | '
value | |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | ||
PRIVILEGE_TYPE | ||
IS_GRANTABLE |
Hinweise:
SHOW FULL COLUMNS gibt alle Berechtigungen
in einem einzigen Feld und kleingeschrieben aus,
beispielsweise als
select,insert,update,references. In
COLUMN_PRIVILEGES steht nur eine einzige
großgeschriebene Berechtigung pro Zeile.
PRIVILEGE_TYPE kann einen (und nur einen)
der folgenden Werte haben: SELECT,
INSERT, UPDATE,
REFERENCES.
Wenn der Benutzer das GRANT OPTION-Recht
hat, sollte IS_GRANTABLE den Wert
YES haben, andernfalls
NO. In der Ausgabe ist GRANT
OPTION nicht als separate Berechtigung aufgeführt.
Die folgenden Anweisungen sind nicht äquivalent:
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES SHOW GRANTS ...
Die CHARACTER_SETS-Tabelle gibt Informationen
über die verfügbaren Zeichensätze.
| Standard Name | SHOW name | Remarks |
CHARACTER_SET_NAME | Charset | |
DEFAULT_COLLATE_NAME | Default collation | |
DESCRIPION | Description | MySQL extension |
MAXLEN | Maxlen | MySQL extension |
Hinweis:
Wir haben der Ausgabe von SHOW CHARACTER
SET zwei Spalten hinzugefügt, die nicht zum
Standard gehören, nämlich Description und
Maxlen.
Die folgenden Anweisungen sind äquivalent:
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS [WHERE name LIKE 'wild'] SHOW CHARACTER SET [LIKE 'wild']
Die COLLATIONS-Tabelle informiert über die
Kollationen der jeweiligen Zeichensätze.
| Standard Name | SHOW name | Remarks |
COLLATION_NAME | Collation |
Hinweis:
Wir haben in der Ausgabe von SHOW COLLATION
fünf nicht zum Standard gehörende Spalten hinzugefügt,
nämlich Charset, Id,
Default, Compiled und
Sortlen.
Die folgenden Anweisungen sind äquivalent:
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS [WHERE collation_name LIKE 'wild'] SHOW COLLATION [LIKE 'wild']
Die
COLLATION_CHARACTER_SET_APPLICABILITY-Tabelle
zeigt an, welcher Zeichensatz für welche Kollation gilt. Die
Spalten sind äquivalent zu den ersten beiden Feldern, die
SHOW COLLATION anzeigt.
| Standard Name | SHOW name | Remarks |
COLLATION_NAME | Collation | |
CHARACTER_SET_NAME | Charset |
Die TABLE_CONSTRAINTS-Tabelle zeigt an, welche
Tabellen Constraints unterliegen.
| Standard Name | SHOW name | Remarks |
CONSTRAINT_CATALOG | NULL | |
CONSTRAINT_SCHEMA | ||
CONSTRAINT_NAME | ||
TABLE_SCHEMA | ||
TABLE_NAME | ||
CONSTRAINT_TYPE |
Hinweise:
Der Wert von CONSTRAINT_TYPE kann
UNIQUE, PRIMARY KEY oder
FOREIGN KEY sein.
Die Informationen über UNIQUE und
PRIMARY KEY gleichen ungefähr dem, was
SHOW INDEX im Feld
Key_name ausgibt, wenn das Feld
Non_unique den Wert 0
hat.
Die Spalte CONSTRAINT_TYPE kann einen der
folgenden Werte enthalten: UNIQUE,
PRIMARY KEY, FOREIGN
KEY, CHECK. Sie ist eine
CHAR-Spalte (keine
ENUM-Spalte). Der
CHECK-Wert wird erst zur Verfügung stehen,
wenn wir CHECK unterstützen.
Die KEY_COLUMN_USAGE-Tabelle beschreibt, welche
Schlüsselspalten Constraints haben.
| Standard Name | SHOW name | Remarks |
CONSTRAINT_CATALOG | NULL | |
CONSTRAINT_SCHEMA | ||
CONSTRAINT_NAME | ||
TABLE_CATALOG | ||
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | ||
ORDINAL_POSITION | ||
POSITION_IN_UNIQUE_CONSTRAINT | ||
REFERENCED_TABLE_SCHEMA | ||
REFERENCED_TABLE_NAME | ||
REFERENCED_COLUMN_NAME |
Hinweise:
Ist der Constraint ein Fremdschlüssel, so ist dies die Spalte des Fremdschlüssels und nicht die Spalte, auf die er verweist.
Der Wert von ORDINAL_POSITION gibt die
Position der Spalte im Constraint und nicht in der Tabelle
wieder. Die Spaltenpositionen werden beginnend mit 1
durchnummeriert.
Der Wert von POSITION_IN_UNIQUE_CONSTRAINT
ist NULL für Unique- und
Fremdschlüssel-Constraints. Bei Fremdschlüssel-Constraints
ist es die Ordinalposition im Schlüssel der referenzierten
Tabelle.
Nehmen wir beispielsweise an, wir hätten zwei Tabellen namens
t1 und t3, die wie folgt
definiert sind:
CREATE TABLE t1
(
s1 INT,
s2 INT,
s3 INT,
PRIMARY KEY(s3)
) ENGINE=InnoDB;
CREATE TABLE t3
(
s1 INT,
s2 INT,
s3 INT,
KEY(s1),
CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3)
) ENGINE=InnoDB;
Für diese beiden Tabellen hat die Tabelle
KEY_COLUMN_USAGE zwei Zeilen:
eine Zeile mit CONSTRAINT_NAME =
'PRIMARY',
TABLE_NAME = 't1',
COLUMN_NAME = 's3',
ORDINAL_POSITION =
1,
POSITION_IN_UNIQUE_CONSTRAINT =
NULL
eine Zeile mit CONSTRAINT_NAME =
'CO', TABLE_NAME =
't3', COLUMN_NAME =
's2',
ORDINAL_POSITION =
1,
POSITION_IN_UNIQUE_CONSTRAINT =
1
Die ROUTINES-Tabelle informiert über
gespeicherte Routinen (sowohl Prozeduren als auch Funktionen). Die
ROUTINES-Tabelle enthält zurzeit keine
benutzerdefinierten Funktionen (UDFs).
Die Spalte „mysql.proc name“ gibt die
mysql.proc-Tabellenspalte an, die der
INFORMATION_SCHEMA.ROUTINES-Tabellenspalte
entspricht (sofern vorhanden).
| Standard Name | mysql.proc name | Remarks |
SPECIFIC_NAME | specific_name | |
ROUTINE_CATALOG | NULL | |
ROUTINE_SCHEMA | db | |
ROUTINE_NAME | name | |
ROUTINE_TYPE | type | {PROCEDURE|FUNCTION} |
DTD_IDENTIFIER | (data type descriptor) | |
ROUTINE_BODY | SQL | |
ROUTINE_DEFINITION | body | |
EXTERNAL_NAME | NULL | |
EXTERNAL_LANGUAGE | language | NULL |
PARAMETER_STYLE | SQL | |
IS_DETERMINISTIC | is_deterministic | |
SQL_DATA_ACCESS | sql_data_access | |
SQL_PATH | NULL | |
SECURITY_TYPE | security_type | |
CREATED | created | |
LAST_ALTERED | modified | |
SQL_MODE | sql_mode | MySQL extension |
ROUTINE_COMMENT | comment | MySQL extension |
DEFINER | definer | MySQL extension |
Hinweise:
MySQL berechnet die EXTERNAL_LANGUAGE wie
folgt:
Wenn mysql.proc.language='SQL', so hat
EXTERNAL_LANGUAGE den Wert
NULL.
Ansonsten ist EXTERNAL_LANGUAGE das,
was in mysql.proc.language aufgeführt
ist. Da wir jedoch noch keine externen Sprachen
eingerichtet haben, ist dies immer
NULL.
Die VIEWS-Tabelle informiert über Views in
Datenbanken. Für den Zugriff auf diese Tabelle ist die
SHOW VIEW-Berechtigung nötig.
| Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
VIEW_DEFINITION | ||
CHECK_OPTION | ||
IS_UPDATABLE | ||
DEFINER | ||
SECURITY_TYPE |
Hinweise:
Die Spalte VIEW_DEFINITION enthält im
Wesentlichen das, was auch SHOW CREATE VIEW
im Feld Create Table anzeigt. Übergehen
Sie die Wörter vor dem SELECT und hinter
WITH CHECK OPTION. Angenommen, die
Anweisung lautete ursprünglich:
CREATE VIEW v AS SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1 WITH CHECK OPTION;
Dann sieht die View-Definition folgendermaßen aus:
SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
Die Spalte CHECK_OPTION hat immer den Wert
NONE.
Die Spalte IS_UPDATABLE ist bei
veränderbaren Views YES und bei
unveränderbaren NO.
Die Spalte DEFINER gibt an, wer die View
angelegt hat. SECURITY_TYPE hat den Wert
DEFINER oder INVOKER.
Die TRIGGERS-Tabelle informiert über Trigger.
Zugriff bekommt nur, wer die SUPER-Berechtigung
vorweisen kann.
| Standard Name | SHOW name | Remarks |
TRIGGER_CATALOG | NULL | |
TRIGGER_SCHEMA | ||
TRIGGER_NAME | Trigger | |
EVENT_MANIPULATION | Event | |
EVENT_OBJECT_CATALOG | NULL | |
EVENT_OBJECT_SCHEMA | ||
EVENT_OBJECT_TABLE | Table | |
ACTION_ORDER | 0 | |
ACTION_CONDITION | NULL | |
ACTION_STATEMENT | Statement | |
ACTION_ORIENTATION | ROW | |
ACTION_TIMING | Timing | |
ACTION_REFERENCE_OLD_TABLE | NULL | |
ACTION_REFERENCE_NEW_TABLE | NULL | |
ACTION_REFERENCE_OLD_ROW | OLD | |
ACTION_REFERENCE_NEW_ROW | NEW | |
CREATED | NULL (0) | |
SQL_MODE | ||
DEFINER |
Hinweise:
Die Spalten TRIGGER_SCHEMA und
TRIGGER_NAME zeigen den Namen der Datenbank
an, in welcher der Trigger auftritt, und den Namen des
Triggers.
Die Spalte EVENT_MANIPULATION hat entweder
den Wert 'INSERT',
'DELETE' oder 'UPDATE'.
Wie in Kapitel 20, Trigger, bereits gesagt, ist jeder
Trigger mit genau einer Tabelle verbunden. Die Spalte
EVENT_OBJECT_SCHEMA zeigt die Datenbank an,
zu der die Tabelle gehört, und
EVENT_OBJECT_TABLE enthält den Namen der
Tabelle.
Die Anweisung ACTION_ORDER zeigt an, an
welcher Ordinalposition die Aktion des Triggers in der Liste
aller ähnlichen Trigger auf derselben Tabelle steht. Dieser
Wert ist gegenwärtig immer 0, da auf einer
Tabelle nicht mehr als ein Trigger mit derselben
EVENT_MANIPULATION und demselben
ACTION_TIMING zulässig ist.
Die Spalte ACTION_STATEMENT enthält die
Anweisung, die bei Aufruf des Triggers ausgeführt wird. Dies
ist dasselbe wie der Text in der
Statement-Spalte der Ausgabe von
SHOW TRIGGERS. Beachten Sie, dass dieser
Text UTF-8-kodiert ist.
Die Spalte ACTION_ORIENTATION enthält
immer den Wert 'ROW'.
Die Spalte ACTION_TIMING enthält entweder
den Wert 'BEFORE' oder
'AFTER'.
Die Spalten ACTION_REFERENCE_OLD_ROW und
ACTION_REFERENCE_NEW_ROW enthalten den
alten und den neuen Spaltenbezeichner. Dies bedeutet, dass
ACTION_REFERENCE_OLD_ROW immer den Wert
'OLD' und
ACTION_REFERENCE_NEW_ROW immer den Wert
'NEW' hat.
Die Spalte SQL_MODE zeigt, welcher
SQL-Servermodus bei der Erstellung des Triggers in Kraft war
(und somit auch für jeden Aufruf dieses Triggers in Kraft
bleibt, egal welcher SQL-Servermodus gerade
eingestellt sein mag). Diese Spalte hat denselben
Wertebereich wie die Systemvariable
sql_mode. Siehe auch
Abschnitt 5.2.5, „Der SQL-Modus des Servers“.
Die Spalte DEFINER kam in MySQL 5.1.2 neu
hinzu. Der DEFINER ist der, der den Trigger
definiert hat.
Die folgenden Spalten haben immer den Wert
NULL: TRIGGER_CATALOG,
EVENT_OBJECT_CATALOG,
ACTION_CONDITION,
ACTION_REFERENCE_OLD_TABLE,
ACTION_REFERENCE_NEW_TABLE und
CREATED.
Ein Beispiel mit dem in Abschnitt 20.3, „Verwendung von Triggern“,
definierten Trigger ins_sum:
mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\G
*************************** 1. row ***************************
TRIGGER_CATALOG: NULL
TRIGGER_SCHEMA: test
TRIGGER_NAME: ins_sum
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: NULL
EVENT_OBJECT_SCHEMA: test
EVENT_OBJECT_TABLE: account
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: SET @sum = @sum + NEW.amount
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: NULL
SQL_MODE:
DEFINER: me@localhost
Siehe auch Abschnitt 13.5.4.23, „SHOW TRIGGERS“.
Die PLUGINS-Tabelle informiert über
Server-Plug-Ins.
| Name | SHOW name | Remarks |
PLUGIN_NAME | ||
PLUGIN_VERSION | ||
PLUGIN_STATUS | ||
PLUGIN_TYPE | ||
PLUGIN_TYPE_VERSION | ||
PLUGIN_LIBRARY | ||
PLUGIN_LIBRARY_VERSION | ||
PLUGIN_AUTHOR | ||
PLUGIN_DESCRIPTION |
Hinweis:
Die PLUGINS-Tabelle gibt es seit MySQL
5.1.5.
Die ENGINES-Tabelle informiert über
Speicher-Engines.
| Name | SHOW name | Remarks |
ENGINE | Engine | |
SUPPORT | Support | |
COMMENT | Comment | |
TRANSACTIONS | Transactions | |
XA | XA | |
SAVEPOINTS | Savepoints |
Hinweis:
Die ENGINES-Tabelle gibt es seit MySQL
5.1.5.
Siehe auch Abschnitt 13.5.4.9, „SHOW ENGINES“.
Die PARTITIONS-Tabelle informiert über
Tabellenpartitionen.
| Name | SHOW name | Remarks |
TABLE_CATALOG | ||
TABLE_SCHEMA | ||
TABLE_NAME | ||
PARTITION_NAME | ||
SUBPARTITION_NAME | ||
PARTITION_ORDINAL_POSITION | ||
SUBPARTITION_ORDINAL_POSITION | ||
PARTITION_METHOD | ||
SUBPARTITION_METHOD | ||
PARTITION_EXPRESSION | ||
SUBPARTITION_EXPRESSION | ||
PARTITION_DESCRIPTION | ||
TABLE_ROWS | ||
AVG_ROW_LENGTH | ||
DATA_LENGTH | ||
MAX_DATA_LENGTH | ||
INDEX_LENGTH | ||
DATA_FREE | ||
CREATE_TIME | ||
UPDATE_TIME | ||
CHECK_TIME | ||
CHECKSUM | ||
PARTITION_COMMENT | ||
NODEGROUP | ||
TABLESPACE_NAME |
Hinweise:
Die PARTITIONS-Tabelle gibt es seit MySQL
5.1.6.
Wichtig: Wenn nach einem
Upgrade auf MySQL 5.1.6 oder höher noch irgendwelche
partitionierten Tabellen vorhanden sind, die in einer älteren
MySQL-Version als MySQL 5.1.6 angelegt wurden, so ist auf der
PARTITIONS-Tabelle kein
SELECT, SHOW oder
DESCRIBE möglich. Bitte lesen Sie
Abschnitt D.1.1, „Änderungen in Release 5.1.6 (Noch nicht veröffentlicht)“, bevor Sie
von MySQL 5.1.5 oder einer älteren Version auf MySQL 5.1.6
oder höher aufrüsten.
Die EVENTS-Tabelle informiert über
Ereignisplaner-Ereignisse.
| Name | SHOW name | Remarks |
EVENT_CATALOG | ||
EVENT_SCHEMA | ||
EVENT_NAME | ||
DEFINER | ||
EVENT_BODY | ||
EVENT_TYPE | ||
EXECUTE_AT | ||
INTERVAL_VALUE | ||
INTERVAL_FIELD | ||
SQL_MODE | ||
STARTS | ||
ENDS | ||
STATUS | ||
ON_COMPLETION | ||
CREATED | ||
LAST_ALTERED | ||
LAST_EXECUTED | ||
EVENT_COMMENT |
Hinweis:
Die EVENTS-Tabelle gibt es seit MySQL
5.1.6.
Wir haben vor, noch weitere
INFORMATION_SCHEMA-Tabellen zu implementieren.
Insbesondere sehen wir die Notwendigkeit einer
PARAMETERS- und einer
REFERENTIAL_CONSTRAINTS-Tabelle.
Einige Erweiterungen von SHOW-Anweisungen
gehören zur Implementierung des
INFORMATION_SCHEMA:
SHOW kann Informationen über die Struktur
des INFORMATION_SCHEMA selbst liefern.
Einige SHOW-Anweisungen können eine
WHERE-Klausel haben. Dadurch können Sie
flexibler angeben, welche Zeilen angezeigt werden sollen.
Da INFORMATION_SCHEMA eine
Informationsdatenbank ist, wird ihr Name von der SHOW
DATABASES-Anweisung ebenfalls ausgegeben. Ebenso können
Sie auch SHOW TABLES auf dem
INFORMATION_SCHEMA verwenden, um eine Liste
seiner Tabellen zu erhalten:
mysql> SHOW TABLES FROM INFORMATION_SCHEMA;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| KEY_COLUMN_USAGE |
| PARTITIONS |
| PLUGINS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| STATISTICS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
+---------------------------------------+
19 rows in set (0.03 sec)
SHOW COLUMNS und DESCRIBE
können Informationen über die Spalten der einzelnen
INFORMATION_SCHEMA-Tabellen liefern.
Mehrere SHOW-Anweisungen wurden um eine
WHERE-Klausel erweitert:
SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW DATABASES SHOW FUNCTION STATUS SHOW KEYS SHOW OPEN TABLES SHOW PROCEDURE STATUS SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES
Wenn eine WHERE-Klausel vorhanden ist, wird sie
mit den von SHOW ausgewiesenen Spaltennamen
verglichen. So liefert beispielsweise die Anweisung SHOW
CHARACTER SET folgende Ausgabespalten:
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
...
Wenn Sie eine WHERE-Klausel mit SHOW
CHARACTER SET verbinden würden, würden Sie auf diese
Spaltennamen Bezug nehmen. Die folgende Anweisung zeigt
beispielsweise Informationen über Zeichensätze an, deren
Standardkollation den String 'japanese'
enthält:
mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';
+---------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------------------+---------------------+--------+
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+---------+---------------------------+---------------------+--------+
Die folgende Anweisung zeigt die Multibytezeichensätze an:
mysql> SHOW CHARACTER SET WHERE Maxlen > 1;
+---------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+---------+---------------------------+---------------------+--------+
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.