Tabla de contenidos
INFORMATION_SCHEMA
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
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
:
Cumple las reglas de Codd. Esto es, todo acceso se hace por tabla.
Nadie necesita aprender una nueva sintaxis. Conocen cómo
funciona SELECT
, 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 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.
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
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 carácteres (por ejemplo,
TABLES.TABLE_NAME
), generalmente es
VARCHAR(
donde N
) CHARACTER SET
utf8N
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.
Un esquema es una base de datos, así que la tabla
SCHEMATA
proporciona información acerca de
bases de datos.
Standard Name | SHOW name | Remarks |
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']
La tabla TABLES
proporciona información
acerca de las tablas en las bases de datos.
Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | Table_ ... | |
TABLE_NAME | Table_ ... | |
TABLE_TYPE | ||
ENGINE | Engine | Extensión MySQL |
VERSION | Version | Extensión MySQL |
ROW_FORMAT | Row_format | Extensión MySQL |
TABLE_ROWS | Rows | Extensión MySQL |
AVG_ROW_LENGTH | Avg_row_length | Extensión MySQL |
DATA_LENGTH | Data_length | Extensión MySQL |
MAX_DATA_LENGTH | Max_data_length | Extensión MySQL |
INDEX_LENGTH | Index_length | Extensión MySQL |
DATA_FREE | Data_free | Extensión MySQL |
AUTO_INCREMENT | Auto_increment | Extensión MySQL |
CREATE_TIME | Create_time | Extensión MySQL |
UPDATE_TIME | Update_time | Extensión MySQL |
CHECK_TIME | Check_time | Extensión MySQL |
TABLE_COLLATION | Collation | Extensión MySQL |
CHECKSUM | Checksum | Extensión MySQL |
CREATE_OPTIONS | Create_options | Extensión MySQL |
TABLE_COMMENT | Comment | Extensió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 carácteres por defecto
de la tabla. TABLE_COLLATION
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']
La tabla COLUMNS
proporciona información
acerca de columnas en tablas.
Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | Field | |
ORDINAL_POSITION | vea las notas | |
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_KEY | Key | Extensión MySQL |
EXTRA | Extra | Extensión MySQL |
COLUMN_COMMENT | Comment | Extensió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 carácteres 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
carácteres 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]
La tabla STATISTICS
proporciona información
acerca de los índices de las tablas.
Standard Name | SHOW name | Remarks |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | = Base de datos | |
TABLE_NAME | Table | |
NON_UNIQUE | Non_unique | |
INDEX_SCHEMA | = Base de datos | |
INDEX_NAME | Key_name | |
SEQ_IN_INDEX | Seq_in_index | |
COLUMN_NAME | Column_name | |
COLLATION | Collation | |
CARDINALITY | Cardinality | |
SUB_PART | Sub_part | Extensión MySQL |
PACKED | Packed | Extensión MySQL |
NULLABLE | Null | Extensión MySQL |
INDEX_TYPE | Index_type | Extensión MySQL |
COMMENT | Comment | 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
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]
La tabla USER_PRIVILEGES
proporciona
información acerca de permisos globales. Esta información
viene de la tabla de permisos mysql.user
.
Standard Name | SHOW name | Remarks |
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
.
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 Name | SHOW name | Remarks |
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
.
La tabla TABLE_PRIVILEGES
proporciona
información de permisos de tablas. Esta información viene de
la tabla de permisos mysql.tables_priv
.
Standard Name | SHOW name | Remarks |
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
.
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 Name | SHOW name | Remarks |
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 ...
La tabla CHARACTER_SETS
proporciona
información acerca de los conjuntos de carácteres disponibles.
Standard Name | SHOW name | Remarks |
CHARACTER_SET_NAME | Charset | |
DEFAULT_COLLATE_NAME | Default collation | |
DESCRIPION | Description | Extensión MySQL |
MAXLEN | Maxlen | Extensió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']
La tabla COLLATIONS
proporciona información
acerca de colaciones para cada conjunto de carácteres.
Standard Name | SHOW name | Remarks |
COLLATION_NAME | Collation |
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']
La tabla
COLLATION_CHARACTER_SET_APPLICABILITY
indica
qué conjunto de carácteres es aplicable a cada colación. Las
columnas son equivalentes a los dos primeros campos mostrados
por SHOW COLLATION
.
Standard Name | SHOW name | Remarks |
COLLATION_NAME | Collation | |
CHARACTER_SET_NAME | Charset |
La tabla TABLE_CONSTRAINTS
describe qué
tablas tienen restricciones.
Standard Name | SHOW name | Remarks |
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
.
La tabla KEY_COLUMN_USAGE
describe qué
columnas clave tienen restricciones.
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 |
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.
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 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 | (descriptor del tipo de datos) | |
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 | Extensión MySQL |
ROUTINE_COMMENT | comment | Extensión MySQL |
DEFINER | definer | Extensió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
.
La tabla VIEWS
proporciona información
acerca de las vistas en las bases de datos.
Standard Name | SHOW name | Remarks |
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.
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 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 ) |
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)
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 carácteres 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 carácteres 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.