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.
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.