Kapitel 22. Die Datenbank INFORMATION_SCHEMA

Inhaltsverzeichnis

22.1. Die Tabelle INFORMATION_SCHEMA SCHEMATA
22.2. Die Tabelle INFORMATION_SCHEMA TABLES
22.3. Die Tabelle INFORMATION_SCHEMA COLUMNS
22.4. Die Tabelle INFORMATION_SCHEMA STATISTICS
22.5. Die Tabelle INFORMATION_SCHEMA USER_PRIVILEGES
22.6. Die Tabelle INFORMATION_SCHEMA SCHEMA_PRIVILEGES
22.7. Die Tabelle INFORMATION_SCHEMA TABLE_PRIVILEGES
22.8. Die Tabelle INFORMATION_SCHEMA COLUMN_PRIVILEGES
22.9. Die Tabelle INFORMATION_SCHEMA CHARACTER_SETS
22.10. Die Tabelle INFORMATION_SCHEMA COLLATIONS
22.11. Die Tabelle INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY
22.12. Die Tabelle INFORMATION_SCHEMA TABLE_CONSTRAINTS
22.13. Die Tabelle INFORMATION_SCHEMA KEY_COLUMN_USAGE
22.14. Die Tabelle INFORMATION_SCHEMA ROUTINES
22.15. Die Tabelle INFORMATION_SCHEMA VIEWS
22.16. Die Tabelle INFORMATION_SCHEMA TRIGGERS
22.17. Die Tabelle INFORMATION_SCHEMA PLUGINS
22.18. Die Tabelle INFORMATION_SCHEMA ENGINES
22.19. Die Tabelle INFORMATION_SCHEMA PARTITIONS
22.20. Die Tabelle INFORMATION_SCHEMA EVENTS
22.21. Weitere INFORMATION_SCHEMA-Tabellen
22.22. Erweiterungen der SHOW-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:

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:

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(N) CHARACTER SET utf8, wobei N 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.

22.1. Die Tabelle INFORMATION_SCHEMA SCHEMATA

Da ein Schema eine Datenbank ist, liefert die Tabelle SCHEMATA Informationen über Datenbanken.

Standard NameSHOW nameRemarks
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']

22.2. Die Tabelle INFORMATION_SCHEMA TABLES

Die Tabelle TABLES informiert über die Tabellen in der Datenbank.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMATable_... 
TABLE_NAMETable_... 
TABLE_TYPE  
ENGINEEngineMySQL extension
VERSIONVersionMySQL extension
ROW_FORMATRow_formatMySQL extension
TABLE_ROWSRowsMySQL extension
AVG_ROW_LENGTHAvg_row_lengthMySQL extension
DATA_LENGTHData_lengthMySQL extension
MAX_DATA_LENGTHMax_data_lengthMySQL extension
INDEX_LENGTHIndex_lengthMySQL extension
DATA_FREEData_freeMySQL extension
AUTO_INCREMENTAuto_incrementMySQL extension
CREATE_TIMECreate_timeMySQL extension
UPDATE_TIMEUpdate_timeMySQL extension
CHECK_TIMECheck_timeMySQL extension
TABLE_COLLATIONCollationMySQL extension
CHECKSUMChecksumMySQL extension
CREATE_OPTIONSCreate_optionsMySQL extension
TABLE_COMMENTCommentMySQL 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
  [FROM db_name]
  [LIKE 'wild']

22.3. Die Tabelle INFORMATION_SCHEMA COLUMNS

Die Tabelle COLUMNS informiert über die Spalten der Tabellen.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAMEField 
ORDINAL_POSITION see notes
COLUMN_DEFAULTDefault 
IS_NULLABLENull 
DATA_TYPEType 
CHARACTER_MAXIMUM_LENGTHType 
CHARACTER_OCTET_LENGTH  
NUMERIC_PRECISIONType 
NUMERIC_SCALEType 
CHARACTER_SET_NAME  
COLLATION_NAMECollation 
COLUMN_TYPETypeMySQL extension
COLUMN_KEYKeyMySQL extension
EXTRAExtraMySQL extension
COLUMN_COMMENTCommentMySQL 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
  FROM tbl_name
  [FROM db_name]
  [LIKE 'wild']

22.4. Die Tabelle INFORMATION_SCHEMA STATISTICS

Die STATISTICS-Tabelle liefert Ihnen Informationen über Tabellenindizes.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMA = Database
TABLE_NAMETable 
NON_UNIQUENon_unique 
INDEX_SCHEMA = Database
INDEX_NAMEKey_name 
SEQ_IN_INDEXSeq_in_index 
COLUMN_NAMEColumn_name 
COLLATIONCollation 
CARDINALITYCardinality 
SUB_PARTSub_partMySQL extension
PACKEDPackedMySQL extension
NULLABLENullMySQL extension
INDEX_TYPEIndex_typeMySQL extension
COMMENTCommentMySQL 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
  FROM tbl_name
  [FROM db_name]

22.5. Die Tabelle INFORMATION_SCHEMA USER_PRIVILEGES

Die Tabelle USER_PRIVILEGES informiert über globale Berechtigungen. Diese Information stammt aus der Berechtigungstabelle mysql.user.

Standard NameSHOW nameRemarks
GRANTEE 'user_name'@'host_name' value
TABLE_CATALOG NULL
PRIVILEGE_TYPE  
IS_GRANTABLE  

Hinweis:

  • Dies ist keine Standardtabelle. Sie entnimmt ihre Werte der Tabelle mysql.user.

22.6. Die Tabelle INFORMATION_SCHEMA SCHEMA_PRIVILEGES

Die Tabelle SCHEMA_PRIVILEGES liefert Informationen über Schema-(Datenbank-)Berechtigungen. Diese Informationen stammen aus der Berechtigungstabelle mysql.db.

Standard NameSHOW nameRemarks
GRANTEE 'user_name'@'host_name' 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.

22.7. Die Tabelle INFORMATION_SCHEMA TABLE_PRIVILEGES

Die Tabelle TABLE_PRIVILEGES liefert Informationen über Tabellenberechtigungen. Diese Informationen stammen aus der Berechtigungstabelle mysql.tables_priv.

Standard NameSHOW nameRemarks
GRANTEE 'user_name'@'host_name' 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.

22.8. Die Tabelle INFORMATION_SCHEMA COLUMN_PRIVILEGES

Die COLUMN_PRIVILEGES-Tabelle liefert Informationen über Spaltenberechtigungen. Diese Informationen entstammen der Berechtigungstabelle mysql.columns_priv.

Standard NameSHOW nameRemarks
GRANTEE 'user_name'@'host_name' 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 ...

22.9. Die Tabelle INFORMATION_SCHEMA CHARACTER_SETS

Die CHARACTER_SETS-Tabelle gibt Informationen über die verfügbaren Zeichensätze.

Standard NameSHOW nameRemarks
CHARACTER_SET_NAMECharset 
DEFAULT_COLLATE_NAMEDefault collation 
DESCRIPIONDescriptionMySQL extension
MAXLENMaxlenMySQL 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']

22.10. Die Tabelle INFORMATION_SCHEMA COLLATIONS

Die COLLATIONS-Tabelle informiert über die Kollationen der jeweiligen Zeichensätze.

Standard NameSHOW nameRemarks
COLLATION_NAMECollation 

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']

22.11. Die Tabelle INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY

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 NameSHOW nameRemarks
COLLATION_NAMECollation 
CHARACTER_SET_NAMECharset 

22.12. Die Tabelle INFORMATION_SCHEMA TABLE_CONSTRAINTS

Die TABLE_CONSTRAINTS-Tabelle zeigt an, welche Tabellen Constraints unterliegen.

Standard NameSHOW nameRemarks
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.

22.13. Die Tabelle INFORMATION_SCHEMA KEY_COLUMN_USAGE

Die KEY_COLUMN_USAGE-Tabelle beschreibt, welche Schlüsselspalten Constraints haben.

Standard NameSHOW nameRemarks
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

22.14. Die Tabelle INFORMATION_SCHEMA ROUTINES

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 Namemysql.proc nameRemarks
SPECIFIC_NAMEspecific_name 
ROUTINE_CATALOG NULL
ROUTINE_SCHEMAdb 
ROUTINE_NAMEname 
ROUTINE_TYPEtype{PROCEDURE|FUNCTION}
DTD_IDENTIFIER (data type descriptor)
ROUTINE_BODY SQL
ROUTINE_DEFINITIONbody 
EXTERNAL_NAME NULL
EXTERNAL_LANGUAGElanguageNULL
PARAMETER_STYLE SQL
IS_DETERMINISTICis_deterministic 
SQL_DATA_ACCESSsql_data_access 
SQL_PATH NULL
SECURITY_TYPEsecurity_type 
CREATEDcreated 
LAST_ALTEREDmodified 
SQL_MODEsql_modeMySQL extension
ROUTINE_COMMENTcommentMySQL extension
DEFINERdefinerMySQL 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.

22.15. Die Tabelle INFORMATION_SCHEMA VIEWS

Die VIEWS-Tabelle informiert über Views in Datenbanken. Für den Zugriff auf diese Tabelle ist die SHOW VIEW-Berechtigung nötig.

Standard NameSHOW nameRemarks
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.

22.16. Die Tabelle INFORMATION_SCHEMA TRIGGERS

Die TRIGGERS-Tabelle informiert über Trigger. Zugriff bekommt nur, wer die SUPER-Berechtigung vorweisen kann.

Standard NameSHOW nameRemarks
TRIGGER_CATALOG NULL
TRIGGER_SCHEMA  
TRIGGER_NAMETrigger 
EVENT_MANIPULATIONEvent 
EVENT_OBJECT_CATALOG NULL
EVENT_OBJECT_SCHEMA  
EVENT_OBJECT_TABLETable 
ACTION_ORDER 0
ACTION_CONDITION NULL
ACTION_STATEMENTStatement 
ACTION_ORIENTATION ROW
ACTION_TIMINGTiming 
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.

22.17. Die Tabelle INFORMATION_SCHEMA PLUGINS

Die PLUGINS-Tabelle informiert über Server-Plug-Ins.

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

22.18. Die Tabelle INFORMATION_SCHEMA ENGINES

Die ENGINES-Tabelle informiert über Speicher-Engines.

NameSHOW nameRemarks
ENGINEEngine 
SUPPORTSupport 
COMMENTComment 
TRANSACTIONSTransactions 
XAXA 
SAVEPOINTSSavepoints 

Hinweis:

  • Die ENGINES-Tabelle gibt es seit MySQL 5.1.5.

Siehe auch Abschnitt 13.5.4.9, „SHOW ENGINES.

22.19. Die Tabelle INFORMATION_SCHEMA PARTITIONS

Die PARTITIONS-Tabelle informiert über Tabellenpartitionen.

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

22.20. Die Tabelle INFORMATION_SCHEMA EVENTS

Die EVENTS-Tabelle informiert über Ereignisplaner-Ereignisse.

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

22.21. Weitere INFORMATION_SCHEMA-Tabellen

Wir haben vor, noch weitere INFORMATION_SCHEMA-Tabellen zu implementieren. Insbesondere sehen wir die Notwendigkeit einer PARAMETERS- und einer REFERENTIAL_CONSTRAINTS-Tabelle.

22.22. Erweiterungen der SHOW-Anweisungen

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.