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

MySQL 5.0

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

El soporte para 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 , en orden alfabético inverso, mostrando tres informaciones: el nombre de la tabla, su tipo y su motor.

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

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

  • Cumple las reglas de Codd. Esto es, todo acceso se hace por tabla.

  • Nadie necesita aprender una nueva sintaxis. Conocen cómo funciona , sólo necesitan aprender los nombres de los objetos.

  • El implementador no tiene que preocuparse de palabras clave.

  • Hay millones de variaciones de la salida, en lugar de sólo una. Esto proporciona flexibilidad a las aplicaciones con requerimientos cambiantes acerca de los metadatos que necesitan

  • La migración es más fácil ya que todos los otros DBMS funcionan así.

Sin embargo, como 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 . De hecho, hay mejoras a en MySQL 5.0. Se describen en Sección 22.2, “Extensiones a las sentencias .

Estandars

La implementación de la estructura de tablas para el 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 en la tabla .

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

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

Permisos

No hay diferencia entre el requerimiento de permisos para () y para . 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 . Para cada columna, hay tres informaciones:

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

  • name” indica el nombre equivalente al comando 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 a en la tabla .) Consulte la lista de palabras reservadas al final del artículo: http://www.dbazine.com/gulutzan5.shtml.

La definición para columnas de carácteres (por ejemplo, ), generalmente es ) CHARACTER SET utf8 donde es como mínimo 64.

Cada sección indica qué comando es equivalente al que proporciona información de , 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 proporciona información acerca de bases de datos.

Standard Name name Remarks
-
  base de datos
   
   
 

Notas:

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

  • 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 proporciona información acerca de las tablas en las bases de datos.

Standard Name name Remarks
 
...  
...  
   
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL

Notas:

  • y son campos simples en , por ejemplo .

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

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

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

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 proporciona información acerca de columnas en tablas.

Standard Name name Remarks
 
   
   
 
  vea las notas
 
 
 
 
   
 
 
   
 
Extensión MySQL
Extensión MySQL
Extensión MySQL

Notas:

  • En , el incluye valores de varias columnas distintas.

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

  • debe ser el mismo que , excepto para conjuntos de carácteres de múltiples bytes.

  • puede derivarse de . Por ejemplo, si dice , y ve en la columna un valor de , el conjunto de carácteres es lo que hay antes del primer subrayado: .

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 proporciona información acerca de los índices de las tablas.

Standard Name name Remarks
 
  = Base de datos
 
 
  = Base de datos
 
 
 
 
 
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL
Extensión MySQL

Notas:

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

    Claramente, la tabla precedente y la salida de 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 proporciona información acerca de permisos globales. Esta información viene de la tabla de permisos .

Standard Name name Remarks
  e.g. 'user'@'host'
 
   
   

Notas:

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

22.1.6. La tabla INFORMATION_SCHEMA SCHEMA_PRIVILEGES

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

Standard Name name Remarks
  e.g. 'user'@'host'
 
   
   
   

Notas:

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

22.1.7. La tabla INFORMATION_SCHEMA TABLE_PRIVILEGES

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

Standard Name name Remarks
  e.g. 'user'@'host'
 
   
   
   
   

Los siguientes comandos no son equivalentes:

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

SHOW GRANTS ...

puede contener uno ( y sólo uno ) de estos valores: , , , , , , , .

22.1.8. La tabla INFORMATION_SCHEMA COLUMN_PRIVILEGES

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

Standard Name name Remarks
  e.g. 'user'@'host'
 
   
   
   
   
   

Notas:

  • En la salida de , los permisos están todos en un campo y en minúsculas, por ejemplo, . En , hay un registro por permiso, y en mayúsculas.

  • puede contener uno ( y sólo uno ) de estos valores: , , , .

  • Si el usuario tiene el permiso , entonces debe ser . De otro modo, debe ser . La salida no lista 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 proporciona información acerca de los conjuntos de carácteres disponibles.

Standard Name name Remarks
 
 
Extensión MySQL
Extensión MySQL

Notas:

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

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 proporciona información acerca de colaciones para cada conjunto de carácteres.

Standard Name name Remarks
 

Notas:

  • Hemos añadido cinco columnas no estándar que se corresponden a , , , , y de la salida de .

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 indica qué conjunto de carácteres es aplicable a cada colación. Las columnas son equivalentes a los dos primeros campos mostrados por .

Standard Name name Remarks
 
 

22.1.12. La tabla INFORMATION_SCHEMA TABLE_CONSTRAINTS

La tabla describe qué tablas tienen restricciones.

Standard Name name Remarks
 
   
   
   
   
   

Notas:

  • El valor puede ser , , o .

  • La información y es acerca de lo mismo que obtiene del campo en la salida de cuando el campo es .

  • La columna puede contener uno de estos valores: , , , . Esta es una columna (no ) . El valor no estará disponible hasta que soportemos .

22.1.13. La tabla INFORMATION_SCHEMA KEY_COLUMN_USAGE

La tabla describe qué columnas clave tienen restricciones.

Standard Name name Remarks
 
   
   
   
   
   
   
   
   
   
   
   

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 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 es 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 y 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 tiene dos registros:

    • Un registro con ='PRIMARY', ='t1', ='s3', =1, =NULL.

    • Un registro con ='CO', ='t3', ='s2', =1, =1.

  • , , y se añadieron en MySQL 5.0.6.

22.1.14. La tabla INFORMATION_SCHEMA ROUTINES

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

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

Standard Name name Remarks
 
 
 
 
  (descriptor del tipo de datos)
 
 
 
 
 
 
 
 
 
 
Extensión MySQL
Extensión MySQL
Extensión MySQL

Notas:

  • MySQL calcula así:

    • Si , entonces es

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

22.1.15. La tabla INFORMATION_SCHEMA VIEWS

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

Standard Name name Remarks
 
   
   
   
   
   

Notas:

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

  • La columna tiene la mayoría de lo que ve en el campo que produce . Ignora las palabras antes de y tras . 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 siempre tiene un valor de .

  • La columna es si la vista es actualizable, si la vista no es actualizable.

22.1.16. La tabla INFORMATION_SCHEMA TRIGGERS

La tabla proporciona información acerca de disparadores.

Esta tabla se implementó inicialmente en MySQL 5.0.10.

Debe tener el permiso para ver esta tabla.

Standard Name name Remarks
 
   
 
 
 
   
 
 
 
 
 
 
 
 
 
 
  ()

Notas:

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

  • La columna contiene uno de los valores , , o .

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

  • El comando 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 , porque no es posible tener más de un disparador con el mismo y en la misma tabla.

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

  • La columna siempre contiene el valor .

  • La columna contiene uno de los dos valores o .

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

  • Las siguientes columnas actualmente siempre contiene : , , , , , y .

Ejemplo, usando el disparador 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 .

22.1.17. Otras tablas INFORMATION_SCHEMA

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