Hosting guebs

Capítulo 22. La base de datos de información INFORMATION_SCHEMA

Tabla de contenidos

22.1. Las tablas INFORMATION_SCHEMA
22.1.1. La tabla INFORMATION_SCHEMA SCHEMATA
22.1.2. La tabla INFORMATION_SCHEMA TABLES
22.1.3. La tabla INFORMATION_SCHEMA COLUMNS
22.1.4. La tabla INFORMATION_SCHEMA STATISTICS
22.1.5. La tabla INFORMATION_SCHEMA USER_PRIVILEGES
22.1.6. La tabla INFORMATION_SCHEMA SCHEMA_PRIVILEGES
22.1.7. La tabla INFORMATION_SCHEMA TABLE_PRIVILEGES
22.1.8. La tabla INFORMATION_SCHEMA COLUMN_PRIVILEGES
22.1.9. La tabla INFORMATION_SCHEMA CHARACTER_SETS
22.1.10. La tabla INFORMATION_SCHEMA COLLATIONS
22.1.11. La tabla INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY
22.1.12. La tabla INFORMATION_SCHEMA TABLE_CONSTRAINTS
22.1.13. La tabla INFORMATION_SCHEMA KEY_COLUMN_USAGE
22.1.14. La tabla INFORMATION_SCHEMA ROUTINES
22.1.15. La tabla INFORMATION_SCHEMA VIEWS
22.1.16. La tabla INFORMATION_SCHEMA TRIGGERS
22.1.17. Otras tablas INFORMATION_SCHEMA
22.2. Extensiones a las sentencias SHOW

El soporte para INFORMATION_SCHEMA está disponible en MySQL 5.0.2 y posterior. Proporciona acceso a los metadatos de la base de datos.

Metadatos son datos acerca de los datos, tales como el nombre de la base de datos o tabla, el tipo de datos de una columna, o permisos de acceso. Otros términos que a veces se usan para esta información son diccionario de datos o catálogo del sistema .

Ejemplo:

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)

Explicación: El comando pide una lista de todas las tablas en la base de datos db5, en orden alfabético inverso, mostrando tres informaciones: el nombre de la tabla, su tipo y su motor.

INFORMATION_SCHEMA es la base de datos de información, que almacena información acerca de todas las otras bases de datos que mantiene el servidor MySQL . Dentro del INFORMATION_SCHEMA hay varias tablas de sólo lectura. En realidad son vistas, no tablas, así que no puede ver ningún fichero asociado con ellas.

Cada usuario MySQL tiene derecho a acceder a estas tablas, pero sólo a los registros que se corresponden a los objetos a los que tiene permiso de acceso.

Ventajas de SELECT

El comando SELECT ... FROM INFORMATION_SCHEMA es una forma más consistente de proporcionar acceso a la información proporcionada por los comandos SHOW que soporta MySQL (SHOW DATABASES, SHOW TABLES, y así). Usar SELECT tiene las siguientes ventajas, en comparación a SHOW:

Sin embargo, como SHOW es popular entre los empleados y usuarios de MySQL, y como puede ser confuso si desaparece, las ventajas de una sintaxis convencional no es razón para eliminar SHOW. De hecho, hay mejoras a SHOW en MySQL 5.0. Se describen en Sección 22.2, “Extensiones a las sentencias SHOW.

Estandars

La implementación de la estructura de tablas para el INFORMATION_SCHEMA en MySQL sigue el estándar ANSI/ISO SQL:2003 Parte 11 Schemata. Nuestra intención es aproximar el cumplimiento de SQL:2003 característica básica F021 Basic information schema.

Los usuarios de SQL Server 2000 (que también sigue el estándar) pueden ver una gran similitud. Sin embargo, MySQL omite varias columnas no relevantes para nuestra implementación, y añade columnas que són específicas de MySQL. Una de estas columnas es engine en la tabla INFORMATION_SCHEMA.TABLES.

Aunque otros DBMS usan una variedad de nombres, como syscat o system, el nombre estándar es INFORMATION_SCHEMA.

En efecto, tenemos una nueva base de datos llamada INFORMATION_SCHEMA, aunque no hay necesidad de hacer un fichero llamado así. Es posible seleccionar INFORMATION_SCHEMA como base de datos por defecto con un comando USE , pero la única forma de acceder al contenido de sus tablas es con SELECT. No puede insertar, actualizar o borrar su contenido.

Permisos

No hay diferencia entre el requerimiento de permisos para (SHOW) y para SELECT . En cada caso, debe tener algún permiso de un objeto para consultar información acerca de el mismo.

22.1. Las tablas INFORMATION_SCHEMA

Explicación de las siguientes secciones

En las siguientes secciones, tomamos tablas y columnas del INFORMATION_SCHEMA. Para cada columna, hay tres informaciones:

  • Standard Name” indica el nombre SQL estándar para la columna.

  • SHOW name” indica el nombre equivalente al comando SHOW más parecido, si lo hay.

  • Remarks” proporciona información adicional donde sea aplicable.

Para evitar usar nombres reservados del estándar o de DB2, SQL Server, o Oracle, hemos cambiado los nombres de las columnas marcados como extensión MySQL. (Por ejemplo, cambiamos COLLATION a TABLE_COLLATION en la tabla TABLES .) Consulte la lista de palabras reservadas al final del artículo: http://www.dbazine.com/gulutzan5.shtml.

La definición para columnas de caracteres (por ejemplo, TABLES.TABLE_NAME), generalmente es VARCHAR(N) CHARACTER SET utf8 donde N es como mínimo 64.

Cada sección indica qué comando SHOW es equivalente al SELECT que proporciona información de INFORMATION_SCHEMA, o si no hay tal equivalente.

Nota: Por ahora, hay algunas columnas no presentes y algunas que no funcionan. Estamos trabajando en ello y tratamos de actualizar la documentación tal y como se producen los cambios.

22.1.1. La tabla INFORMATION_SCHEMA SCHEMATA

Un esquema es una base de datos, así que la tabla SCHEMATA proporciona información acerca de bases de datos.

Standard NameSHOW nameRemarks
CATALOG_NAME-NULL
SCHEMA_NAME base de datos
DEFAULT_CHARACTER_SET_NAME  
DEFAULT_COLLATION_NAME  
SQL_PATH NULL

Notas:

  • Para SQL_PATH, podemos soportar eventualmente algo en MySQL 5.x. De momento siempre es NULL.

  • DEFAULT_COLLATION_NAME se añadió en MySQL 5.0.6.

Los siguientes comandos son equivalentes:

SELECT SCHEMA_NAME AS `Database`
  FROM INFORMATION_SCHEMA.SCHEMATA
  [WHERE SCHEMA_NAME LIKE 'wild']

SHOW DATABASES
  [LIKE 'wild']

22.1.2. La tabla INFORMATION_SCHEMA TABLES

La tabla TABLES proporciona información acerca de las tablas en las bases de datos.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMATable_... 
TABLE_NAMETable_... 
TABLE_TYPE  
ENGINEEngineExtensión MySQL
VERSIONVersionExtensión MySQL
ROW_FORMATRow_formatExtensión MySQL
TABLE_ROWSRowsExtensión MySQL
AVG_ROW_LENGTHAvg_row_lengthExtensión MySQL
DATA_LENGTHData_lengthExtensión MySQL
MAX_DATA_LENGTHMax_data_lengthExtensión MySQL
INDEX_LENGTHIndex_lengthExtensión MySQL
DATA_FREEData_freeExtensión MySQL
AUTO_INCREMENTAuto_incrementExtensión MySQL
CREATE_TIMECreate_timeExtensión MySQL
UPDATE_TIMEUpdate_timeExtensión MySQL
CHECK_TIMECheck_timeExtensión MySQL
TABLE_COLLATIONCollationExtensión MySQL
CHECKSUMChecksumExtensión MySQL
CREATE_OPTIONSCreate_optionsExtensión MySQL
TABLE_COMMENTCommentExtensión MySQL

Notas:

  • TABLE_SCHEMA y TABLE_NAME son campos simples en SHOW , por ejemplo Table_in_db1.

  • TABLE_TYPE debe ser BASE TABLE o VIEW. Si la tabla es temporal, entonces TABLE_TYPE = TEMPORARY. (No hay vistas temporales, así que no es ambíguo.)

  • La columna TABLE_ROWS es NULL si la tabla está en la base de datos INFORMATION_SCHEMA .

  • No tneemos nada para el conjunto de caracteres por defecto de la tabla. TABLE_COLLATION se acerca, ya que los nombres de colación comienzan con el nombre del conjunto de caracteres.

Los siguientes comandos son equivalentes:

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.1.3. La tabla INFORMATION_SCHEMA COLUMNS

La tabla COLUMNS proporciona información acerca de columnas en tablas.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAMEField 
ORDINAL_POSITION vea las notas
COLUMN_DEFAULTDefault 
IS_NULLABLENull 
DATA_TYPEType 
CHARACTER_MAXIMUM_LENGTHType 
CHARACTER_OCTET_LENGTH  
NUMERIC_PRECISIONType 
NUMERIC_SCALEType 
CHARACTER_SET_NAME  
COLLATION_NAMECollation 
COLUMN_KEYKeyExtensión MySQL
EXTRAExtraExtensión MySQL
COLUMN_COMMENTCommentExtensión MySQL

Notas:

  • En SHOW, el Type incluye valores de varias columnas COLUMNS distintas.

  • ORDINAL_POSITION es necesario ya que puede algún día querer decir ORDER BY ORDINAL_POSITION. Al contrario que SHOW, SELECT no tiene ordenación automática.

  • CHARACTER_OCTET_LENGTH debe ser el mismo que CHARACTER_MAXIMUM_LENGTH, excepto para conjuntos de caracteres de múltiples bytes.

  • CHARACTER_SET_NAME puede derivarse de Collation. Por ejemplo, si dice SHOW FULL COLUMNS FROM t, y ve en la columna Collation un valor de latin1_swedish_ci, el conjunto de caracteres es lo que hay antes del primer subrayado: latin1.

Los siguientes comandos son casi equivalentes:

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.1.4. La tabla INFORMATION_SCHEMA STATISTICS

La tabla STATISTICS proporciona información acerca de los índices de las tablas.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMA = Base de datos
TABLE_NAMETable 
NON_UNIQUENon_unique 
INDEX_SCHEMA = Base de datos
INDEX_NAMEKey_name 
SEQ_IN_INDEXSeq_in_index 
COLUMN_NAMEColumn_name 
COLLATIONCollation 
CARDINALITYCardinality 
SUB_PARTSub_partExtensión MySQL
PACKEDPackedExtensión MySQL
NULLABLENullExtensión MySQL
INDEX_TYPEIndex_typeExtensión MySQL
COMMENTCommentExtensión MySQL

Notas:

  • No hay una tabla estándar para índices. La lista precedente es similar a lo que retorna SQL Server 2000 para sp_statistics, excepto que hemos cambiado el nombre QUALIFIER con CATALOG y OWNER con SCHEMA.

    Claramente, la tabla precedente y la salida de SHOW INDEX se derivan del mismo padre. Así que la correlación está cercana.

Los siguientes comandos son equivalentes:

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']

SHOW INDEX
  FROM tbl_name
  [FROM db_name]

22.1.5. La tabla INFORMATION_SCHEMA USER_PRIVILEGES

La tabla USER_PRIVILEGES proporciona información acerca de permisos globales. Esta información viene de la tabla de permisos mysql.user .

Standard NameSHOW nameRemarks
GRANTEE e.g. 'user'@'host'
TABLE_CATALOG NULL
PRIVILEGE_TYPE  
IS_GRANTABLE  

Notas:

  • Esta tabla no es estándar. Toma sus valores de la tabla mysql.user .

22.1.6. La tabla INFORMATION_SCHEMA SCHEMA_PRIVILEGES

La tabla SCHEMA_PRIVILEGES proporciona información acerca del esquema de permisos (base de datos). Esta información viene de la tabla de permisos mysql.db .

Standard NameSHOW nameRemarks
GRANTEE e.g. 'user'@'host'
TABLE_CATALOG NULL
TABLE_SCHEMA  
PRIVILEGE_TYPE  
IS_GRANTABLE  

Notas:

  • Esta tabla no es estándar. Toma sus valores de la tabla mysql.db .

22.1.7. La tabla INFORMATION_SCHEMA TABLE_PRIVILEGES

La tabla TABLE_PRIVILEGES proporciona información de permisos de tablas. Esta información viene de la tabla de permisos mysql.tables_priv .

Standard NameSHOW nameRemarks
GRANTEE e.g. 'user'@'host'
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

Los siguientes comandos no son equivalentes:

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

SHOW GRANTS ...

PRIVILEGE_TYPE puede contener uno ( y sólo uno ) de estos valores: SELECT, INSERT, UPDATE, REFERENCES, ALTER, INDEX, DROP, CREATE VIEW.

22.1.8. La tabla INFORMATION_SCHEMA COLUMN_PRIVILEGES

La tabla COLUMN_PRIVILEGES proporciona información acerca de permisos de columnas. Esta información viene de la tabla de permisos mysql.columns_priv .

Standard NameSHOW nameRemarks
GRANTEE e.g. 'user'@'host'
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

Notas:

  • En la salida de SHOW FULL COLUMNS, los permisos están todos en un campo y en minúsculas, por ejemplo, select,insert,update,references. En COLUMN_PRIVILEGES, hay un registro por permiso, y en mayúsculas.

  • PRIVILEGE_TYPE puede contener uno ( y sólo uno ) de estos valores: SELECT, INSERT, UPDATE, REFERENCES.

  • Si el usuario tiene el permiso GRANT OPTION , entonces IS_GRANTABLE debe ser YES. De otro modo, IS_GRANTABLE debe ser NO. La salida no lista GRANT OPTION como permisos separado.

Los siguientes comandos no son equivalentes:

SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES

SHOW GRANTS ...

22.1.9. La tabla INFORMATION_SCHEMA CHARACTER_SETS

La tabla CHARACTER_SETS proporciona información acerca de los conjuntos de caracteres disponibles.

Standard NameSHOW nameRemarks
CHARACTER_SET_NAMECharset 
DEFAULT_COLLATE_NAMEDefault collation 
DESCRIPIONDescriptionExtensión MySQL
MAXLENMaxlenExtensión MySQL

Notas:

  • Hemos añadido dos columnas no estándar que se corresponden a Description y Maxlen en la salida de SHOW CHARACTER SET.

Los siguientes comandos son equivalentes:

SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
  [WHERE name LIKE 'wild']

SHOW CHARACTER SET
  [LIKE 'wild']

22.1.10. La tabla INFORMATION_SCHEMA COLLATIONS

La tabla COLLATIONS proporciona información acerca de colaciones para cada conjunto de caracteres.

Standard NameSHOW nameRemarks
COLLATION_NAMECollation 

Notas:

  • Hemos añadido cinco columnas no estándar que se corresponden a Charset, Id, Default, Compiled, y Sortlen de la salida de SHOW COLLATION.

Los siguientes comandos son equivalentes:

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
  [WHERE collation_name LIKE 'wild']

SHOW COLLATION
  [LIKE 'wild']

22.1.11. La tabla INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY

La tabla COLLATION_CHARACTER_SET_APPLICABILITY indica qué conjunto de caracteres es aplicable a cada colación. Las columnas son equivalentes a los dos primeros campos mostrados por SHOW COLLATION.

Standard NameSHOW nameRemarks
COLLATION_NAMECollation 
CHARACTER_SET_NAMECharset 

22.1.12. La tabla INFORMATION_SCHEMA TABLE_CONSTRAINTS

La tabla TABLE_CONSTRAINTS describe qué tablas tienen restricciones.

Standard NameSHOW nameRemarks
CONSTRAINT_CATALOG NULL
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
TABLE_SCHEMA  
TABLE_NAME  
CONSTRAINT_TYPE  

Notas:

  • El valor CONSTRAINT_TYPE puede ser UNIQUE, PRIMARY KEY, o FOREIGN KEY.

  • La información UNIQUE y PRIMARY KEY es acerca de lo mismo que obtiene del campo Key_name en la salida de SHOW INDEX cuando el campo Non_unique es 0.

  • La columna CONSTRAINT_TYPE puede contener uno de estos valores: UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK. Esta es una columna CHAR (no ENUM) . El valor CHECK no estará disponible hasta que soportemos CHECK.

22.1.13. La tabla INFORMATION_SCHEMA KEY_COLUMN_USAGE

La tabla KEY_COLUMN_USAGE describe qué columnas clave tienen restricciones.

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  

Notas:

  • Si la restricción es una clave foránea, entonces esta es la columna de la clave foránea, no la columna a la que la clave foránea hace referencia.

  • El valor de ORDINAL_POSITION es la posición de la columna en la restricción, no la posición de la columna en la tabla. Las posiciones de columnas se numeran comenzando por 1.

  • El valor de POSITION_IN_UNIQUE_CONSTRAINT es NULL para restricciones de claves primárias y únicas. Para restricciones de claves foráneas, es la posición ordinal en la clave de la tabla a la que se referencia.

    Por ejemplo, suponga que hay dos tablas llamadas t1 y t3 con las siguientes definiciones:

    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;
    

    Para estas dos tablas, la tabla KEY_COLUMN_USAGE tiene dos registros:

    • Un registro con CONSTRAINT_NAME='PRIMARY', TABLE_NAME='t1', COLUMN_NAME='s3', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=NULL.

    • Un registro con CONSTRAINT_NAME='CO', TABLE_NAME='t3', COLUMN_NAME='s2', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=1.

  • REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, y REFERENCED_COLUMN_NAME se añadieron en MySQL 5.0.6.

22.1.14. La tabla INFORMATION_SCHEMA ROUTINES

La tabla ROUTINES proporciona información acerca de rutinas almacenadas (procedimientos y funciones). La tabla ROUTINES no incluye funciones definidas por el usuario (UDFs) de momento.

La columna llamada “mysql.proc name” indica la columna de la tabla mysql.proc que se corresponde a la columna de la tabla INFORMATION_SCHEMA.ROUTINES, si hay alguna.

Standard Namemysql.proc nameRemarks
SPECIFIC_NAMEspecific_name 
ROUTINE_CATALOG NULL
ROUTINE_SCHEMAdb 
ROUTINE_NAMEname 
ROUTINE_TYPEtype{PROCEDURE|FUNCTION}
DTD_IDENTIFIER (descriptor del tipo de datos)
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_modeExtensión MySQL
ROUTINE_COMMENTcommentExtensión MySQL
DEFINERdefinerExtensión MySQL

Notas:

  • MySQL calcula EXTERNAL_LANGUAGE así:

    • Si mysql.proc.language='SQL', entonces EXTERNAL_LANGUAGE es NULL

    • En caso contrario, EXTERNAL_LANGUAGE es lo que hay en mysql.proc.language. Sin embargo, no tenemos idiomas externos de momento, así que siempre es NULL.

22.1.15. La tabla INFORMATION_SCHEMA VIEWS

La tabla VIEWS proporciona información acerca de las vistas en las bases de datos.

Standard NameSHOW nameRemarks
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
VIEW_DEFINITION  
CHECK_OPTION  
IS_UPDATABLE  

Notas:

  • Hay un nuevo permiso, SHOW VIEW, sin el cual no puede ver la tabla VIEWS.

  • La columna VIEW_DEFINITION tiene la mayoría de lo que ve en el campo Create Table que produce SHOW CREATE VIEW . Ignora las palabras antes de SELECT y tras WITH CHECK OPTION. Por ejemplo, si el comando original era:

    CREATE VIEW v AS
      SELECT s2,s1 FROM t
      WHERE s1 > 5
      ORDER BY s1
      WITH CHECK OPTION;
    

    entonces la definición de la vista es:

    SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
    
  • La columna CHECK_OPTION siempre tiene un valor de NONE.

  • La columna IS_UPDATABLE es YES si la vista es actualizable, NO si la vista no es actualizable.

22.1.16. La tabla INFORMATION_SCHEMA TRIGGERS

La tabla TRIGGERS proporciona información acerca de disparadores.

Esta tabla se implementó inicialmente en MySQL 5.0.10.

Debe tener el permiso SUPER para ver esta tabla.

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)

Notas:

  • Las columnas TRIGGER_SCHEMA y TRIGGER_NAME contienen el nombre de la base de datos en que se produce el dispardor, y el nombre del disparador, respectivamente.

  • La columna EVENT_MANIPULATION contiene uno de los valores 'INSERT', 'DELETE', o 'UPDATE'.

  • Como se explica en Capítulo 20, Disparadores (triggers), cada disparador se asocia exactamente con una tabla. Las columnas EVENT_OBJECT_SCHEMA y EVENT_OBJECT_TABLE contienen la base de datos en que ocurre esta tabla, y el nombre de la tabla.

  • El comando ACTION_ORDER contiene la posición ordinal de la acción del disparador en la lista de todos los disparadores similares en la misma tabla. Actualmente, este valor siempre es 0, porque no es posible tener más de un disparador con el mismo EVENT_MANIPULATION y ACTION_TIMING en la misma tabla.

  • La columna ACTION_STATEMENT contiene el comando a ejecutarse cuando el disparador se invoca. Esto es lo mismo que el texto mostrado en la columna Statement de la salida de SHOW TRIGGERS. Tenga en cuenta que este texto usa codificación UTF-8 .

  • La columna ACTION_ORIENTATION siempre contiene el valor 'ROW'.

  • La columna ACTION_TIMING contiene uno de los dos valores 'BEFORE' o 'AFTER'.

  • Las columnas ACTION_REFERENCE_OLD_ROW y ACTION_REFERENCE_NEW_ROW contienen el antiguo y nuevo identificador de columna, respectivamente. Esto significa que ACTION_REFERENCE_OLD_ROW siempre contiene el valor 'OLD' y ACTION_REFERENCE_NEW_ROW siempre contiene el valor 'NEW'.

  • Las siguientes columnas actualmente siempre contiene NULL: TRIGGER_CATALOG, EVENT_OBJECT_CATALOG, ACTION_CONDITION, ACTION_REFERENCE_OLD_TABLE, ACTION_REFERENCE_NEW_TABLE, y CREATED.

Ejemplo, usando el disparador ins_sum definido en Sección 20.3, “Utilización de disparadores”:

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
1 row in set (1.54 sec)

Consulte Sección 13.5.4.20, “Sintaxis de SHOW TRIGGERS.

22.1.17. Otras tablas INFORMATION_SCHEMA

Pretendemos implementar tablas adicionales INFORMATION_SCHEMA . En particular, sabemos de la necesidad de INFORMATION_SCHEMA.PARAMETERS y INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS.

22.2. Extensiones a las sentencias SHOW

Algunas extensiones de comandos SHOW acompañan la implementación de INFORMATION_SCHEMA:

  • SHOW puede usarse para obtener información acerca de la estructura de INFORMATION_SCHEMA mismo.

  • Varios comandos SHOW aceptan una cláusula WHERE que proporciona más flexibilidad al especificar qué registros mostrar.

Estas extensiones están disponibles desde MySQL 5.0.3.

INFORMATION_SCHEMA es una base de datos de información, así que su nombre se incluye en la salida de SHOW DATABASES. Similarmente, SHOW TABLES puede usarse con INFORMATION_SCHEMA para obtener una lista de sus tablas:

mysql> SHOW TABLES FROM INFORMATION_SCHEMA;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| SCHEMATA                              |
| TABLES                                |
| COLUMNS                               |
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| ROUTINES                              |
| STATISTICS                            |
| VIEWS                                 |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| SCHEMA_PRIVILEGES                     |
| TABLE_PRIVILEGES                      |
| COLUMN_PRIVILEGES                     |
| TABLE_CONSTRAINTS                     |
| KEY_COLUMN_USAGE                      |
+---------------------------------------+

SHOW COLUMNS y DESCRIBE pueden mostrar información acerca de las columns en tablas INFORMATION_SCHEMA individuales.

Varios comandos SHOW se han extendido para permitir cláusulas WHERE :

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

La cláusula WHERE , si está presente, se evalúa contra los nombres de columna mostrados por el comando SHOW. Por ejemplo, el comando SHOW COLLATION produce estas columnas de salida:

Por ejemplo, el comando SHOW CHARACTER SET produce estas columnas de salida:

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   | ISO 8859-1 West European    | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |

...

Para usar una cláusula WHERE con SHOW CHARACTER SET, se referiría a esos nombres de columna. Como ejemplo, el siguiente comando muestra información acerca de conjuntos de caracteres para los que la colación por defecto contiene la cadena "japanese":

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

Este comando muestra los conjuntos de caracteres de múltiples bytes:

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

Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.