RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 9. База данных INFORMATION_SCHEMA

INFORMATION_SCHEMA обеспечивает доступ к метаданным базы данных.

Метаданные представляют собой данные относительно данных, имени базы данных или таблицы, тип данных столбца или привилегии доступа. Другие термины, которые иногда используются для этой информации: каталог системы и словарь данных.

INFORMATION_SCHEMA информационная база данных, место, которое сохраняет информацию относительно всех других баз данных, которые поддерживает сервер MySQL. Внутри INFORMATION_SCHEMA имеется несколько таблиц только для чтения. Они фактически view, а не обычные таблицы, так как не имеется никаких файлов, связанных с ними.

В действительности мы имеем базу данных INFORMATION_SCHEMA, хотя сервер не создает каталог баз данных с таким именем. Возможно выбрать INFORMATION_SCHEMA как заданную по умолчанию базу данных инструкцией USE, но это возможно только, чтобы читать содержание таблиц. Вы не можете вставлять в них, модифицировать их или удалять из них.

Имеется пример инструкции, которая получает информацию из INFORMATION_SCHEMA:

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)

Объяснение: инструкция запрашивает список всех таблиц в базе данных db5 в обратном алфавитном порядке, показывая только три части информации: имя таблицы, тип таблицы и тип памяти.

Каждый пользователь MySQL имеет право обратиться к этим таблицам, но может видеть только строки в таблицах, которые соответствуют объектам, для которых пользователь имеет соответствующие привилегии доступа. В некоторых случаях (например, столбец ROUTINE_DEFINITION в таблице INFORMATION_SCHEMA.ROUTINES), пользователи, которые имеют недостаточные привилегии, будут видеть NULL.

Инструкция SELECT ... FROM INFORMATION_SCHEMA предназначена как более непротиворечивый способ обеспечить доступ к информации, обеспеченной различными инструкциями SHOW, которые MySQL поддерживает (SHOW DATABASES, SHOW TABLES и им подобные). Использование SELECT имеет эти преимущества перед SHOW:

  • Это соответствует правилам Кодда. То есть, весь доступ выполнен на таблицах.

  • Никто не должен узнавать новый операторный синтаксис. Потому что они уже знают, как работает SELECT, они должны узнать только объектные имена.

  • Реализаторы не должны волноваться относительно добавления ключевых слов.

  • Имеются миллионы возможных изменений вывода вместо одного. Это обеспечивает большее количество гибкости для прикладных программ, которые имеют изменяющиеся требования относительно метаданных, в которых они нуждаются.

  • Миграция проще, потому что каждая другая СУБД понимает этот способ.

Однако, потому что команды SHOW популярна у пользователей MySQL, никто их убирать не собирается. Фактически, наряду с реализацией INFORMATION_SCHEMA, имеются расширения для SHOW.

Не имеется никакого различия между привилегиями, требуемыми для инструкций SHOW и нужными, чтобы выбрать информацию из INFORMATION_SCHEMA. В любом случае Вы должны иметь некоторую привилегию на объекте, чтобы видеть информацию относительно этого объекта.

Реализация структур таблицы INFORMATION_SCHEMA в MySQL следует ANSI/ISO SQL:2003 Part 11 Schemata и в основном отвечает стандарту SQL:2003 core feature F021 Basic information schema.

Пользователи SQL Server 2000 (который также следует стандарту) могут обратить внимание на сильное сходство. Однако, MySQL опустил много столбцов, которые нерелевантными для этой реализации, и добавил столбцы, которые являются MySQL-специфическими. Один такой столбец: ENGINE в таблице INFORMATION_SCHEMA.TABLES.

Следующие разделы описывают каждую из таблиц и столбцов, которые находятся в INFORMATION_SCHEMA. Для каждого столбца имеются три блока информации:

  • INFORMATION_SCHEMA Name указывает имя для столбца в таблице INFORMATION_SCHEMA. Это не соответствует стандартному имени SQL, если в поле Remarks значится MySQL extension.

  • SHOW Name указывает эквивалентное имя поля в самой близкой инструкции SHOW, если она имеется.

  • Remarks обеспечивает дополнительную информацию. Если это поле NULL, это означает, что значение столбца всегда NULL. Если это поле MySQL extension, столбец является расширением MySQL стандарта SQL.

Чтобы избегать использовать любое имя, которое зарезервировано в стандарте SQL, DB2 или Oracle, имена некоторых столбцов, отмеченных как MySQL extension переделаны. Например, COLLATION на TABLE_COLLATION в таблице TABLES. Ссписок зарезервированных слов изложен в конце статьи на http://www.dbazine.com/gulutzan5.shtml.

Определение для символьных столбцов (например, TABLES.TABLE_NAME) вообще VARCHAR(N) CHARACTER SET utf8, где N по крайней мере 64.

Каждый раздел указывает то, какая инструкция SHOW является эквивалентной SELECT, который собирает информацию из INFORMATION_SCHEMA, если имеется такая инструкция.

Обратите внимание: в настоящее время, имеются некоторые столбцы, расставленные не по порядку, а кое-какие еще вообще отсутствуют.

9.1. Таблица INFORMATION_SCHEMA SCHEMATA

Схема является базой данных, так что таблица SCHEMATA обеспечивает информацию относительно баз данных.

INFORMATION_SCHEMA Name SHOW Name Remarks
CATALOG_NAME NULL
SCHEMA_NAME База данных
DEFAULT_CHARACTER_SET_NAME
DEFAULT_COLLATION_NAME
SQL_PATH NULL

Следующие инструкции эквивалентны:

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

9.2. Таблица INFORMATION_SCHEMA TABLES

Таблица TABLES обеспечивает информацию относительно таблиц в базах данных.

INFORMATION_SCHEMA Name SHOW Name Remarks
TABLE_CATALOGNULL
TABLE_SCHEMATable_...
TABLE_NAMETable_ ...
TABLE_TYPE
ENGINEТип памяти MySQL extension
VERSIONVersion MySQL extension
ROW_FORMATRow_format MySQL extension
TABLE_ROWSRows MySQL extension
AVG_ROW_LENGTHAvg_row_length MySQL extension
DATA_LENGTHData_length MySQL extension
MAX_DATA_LENGTHMax_data_length MySQL extension
INDEX_LENGTHIndex_length MySQL extension
DATA_FREEData_free MySQL extension
AUTO_INCREMENTAuto_increment MySQL extension
CREATE_TIMECreate_time MySQL extension
UPDATE_TIMEUpdate_time MySQL extension
CHECK_TIMECheck_time MySQL extension
TABLE_COLLATIONCollation MySQL extension
CHECKSUMChecksum MySQL extension
CREATE_OPTIONSCreate_options MySQL extension
TABLE_COMMENTКомментарий MySQL extension

Примечания:

  • TABLE_SCHEMA и TABLE_NAME одиночное поле в выводе SHOW, например: Table_in_db1.

  • TABLE_TYPE должен быть BASE TABLE или VIEW. Если таблица временная, то TABLE_TYPE = TEMPORARY. Не имеется никаких временных view, так что это однозначно.

  • Для разбитых на разделы таблиц, начиная с MySQL 5.1.9, столбец ENGINE показывает тип памяти, используемого всеми разделами. Раньше этот столбец показывал для таких таблиц PARTITION.

  • Столбец TABLE_ROWS NULL, если таблица находится в базе данных INFORMATION_SCHEMA. Для таблиц InnoDB счетчтк строк только грубая оценка, используемая в оптимизации SQL.

  • Для таблиц, использующих тип памяти NDBCLUSTER, начиная с MySQL 5.1.12, столбец DATA_LENGTH отражает истинное количество памяти для столбцов с переменной шириной. См. Глюк #18413.

    Обратите внимание: так как MySQL Cluster распределяет память для столбцов с переменной шириной в 10-страничных блоках по 32 килобайта каждый, использование места для таких столбцов сообщено в приращениях по 320 KB.

  • Мы не имеем ничего для заданного по умолчанию набора символов таблицы. TABLE_COLLATION близко, потому что имена объединения начинаются с имени набора символов.

  • Начиная с MySQL 5.1.9, столбец CREATE_OPTIONS показывается разбитый на разделы, если таблица разбита на разделы.

Следующие инструкции эквивалентны:

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

9.3. Таблица INFORMATION_SCHEMA COLUMNS

Таблица COLUMNS обеспечивает информацию относительно столбцов в таблицах.

INFORMATION_SCHEMA Name SHOW Name Remarks
TABLE_CATALOG NULL
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAMEПоле
ORDINAL_POSITION См. примечания
COLUMN_DEFAULTЗначение по умолчанию
IS_NULLABLENull
DATA_TYPEType
CHARACTER_MAXIMUM_LENGTHType
CHARACTER_OCTET_LENGTH
NUMERIC_PRECISIONType
NUMERIC_SCALEType
CHARACTER_SET_NAME
COLLATION_NAMECollation
COLUMN_TYPEType MySQL extension
COLUMN_KEYKey MySQL extension
EXTRAExtra MySQL extension
COLUMN_COMMENTComment MySQL extension

Примечания:

  • В SHOW Type отображает включает значения из нескольких различных столбцов COLUMNS.

  • ORDINAL_POSITION необходим, потому что Вы могли бы указать ORDER BY ORDINAL_POSITION. В отличие от SHOW, SELECT не имеет автоматического упорядочения.

  • CHARACTER_OCTET_LENGTH должен быть таким же, как CHARACTER_MAXIMUM_LENGTH, если бы не многобайтовые наборы символов.

  • CHARACTER_SET_NAME может быть получен из Collation. Например, если Вы говорите SHOW FULL COLUMNS FROM t, и видите в столбце Collation значение latin1_swedish_ci, набор символов то, что перед первым символом подчеркивания: latin1.

Следующие инструкции почти эквивалентны:

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

9.4. Таблица INFORMATION_SCHEMA STATISTICS

Таблица STATISTICS обеспечивает информацию относительно индексов таблицы.

INFORMATION_SCHEMA Name SHOW Name Remarks
TABLE_CATALOGNULL
TABLE_SCHEMA =база данных
TABLE_NAMETable
NON_UNIQUENon_unique
INDEX_SCHEMA =база данных
INDEX_NAMEKey_name
SEQ_IN_INDEXSeq_in_index
COLUMN_NAMEColumn_name
COLLATIONCollation
CARDINALITYCardinality
SUB_PARTSub_part MySQL extension
PACKEDPacked MySQL extension
NULLABLENull MySQL extension
INDEX_TYPEIndex_type MySQL extension
COMMENTComment MySQL extension

Примечания:

  • Не имеется никакой стандартной таблицы для индексов. Предшествующий список подобен тому, что возвращается SQL Server 2000 для sp_statistics, за исключением того, что заменили имя QUALIFIER на CATALOG и OWNER на SCHEMA.

    Предшествующая таблица и вывод из SHOW INDEX получен от того же самого родителя. Так что корреляция уже близкая.

Следующие инструкции эквивалентны:

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

9.5. Таблица INFORMATION_SCHEMA USER_PRIVILEGES

Таблица USER_PRIVILEGES обеспечивает информацию относительно глобальных привилегий. Эта информация исходит из таблицы предоставления привилегий mysql.user.

INFORMATION_SCHEMA Name SHOW Name Remarks
GRANTEE 'user_name '@'host_name' value, MySQL extension
TABLE_CATALOG NULL, MySQL extension
PRIVILEGE_TYPEMySQL extension
IS_GRANTABLE MySQL extension

Примечания:

  • Это ненормативная таблица. Требуется значения от таблицы mysql.user.

9.6. Таблица INFORMATION_SCHEMA SCHEMA_PRIVILEGES

Таблица SCHEMA_PRIVILEGES обеспечивает информацию относительно схемы привилегиями (базы данных). Эта информация исходит из таблицы предоставления mysql.db.

INFORMATION_SCHEMA Name SHOW Name Remarks
GRANTEE ' user_name'@'host_name' value, MySQL extension
TABLE_CATALOG NULL, MySQL extension
TABLE_SCHEMA MySQL extension
PRIVILEGE_TYPEMySQL extension
IS_GRANTABLE MySQL extension

Примечания:

  • Это ненормативная таблица. Требуется значения от таблицы mysql.db.

9.7. Таблица INFORMATION_SCHEMA TABLE_PRIVILEGES

Таблица TABLE_PRIVILEGES обеспечивает информацию относительно привилегий таблицы. Эта информация исходит из таблицы предоставления mysql.tables_priv.

INFORMATION_SCHEMA Name SHOW Name Remarks
GRANTEE ' user_name'@'host_name' value
TABLE_CATALOG NULL
TABLE_SCHEMA
TABLE_NAME
PRIVILEGE_TYPE
IS_GRANTABLE

Примечания:

  • PRIVILEGE_TYPE может содержать одно (и только одно!) из этих значений: SELECT, INSERT, UPDATE, REFERENCES, ALTER, INDEX, DROP или CREATE VIEW.

Следующие инструкции не эквивалентны:

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
SHOW GRANTS ...

9.8. Таблица INFORMATION_SCHEMA COLUMN_PRIVILEGES

Таблица COLUMN_PRIVILEGES обеспечивает информацию относительно привилегий столбца. Эта информация исходит из таблицы предоставления mysql.columns_priv.

INFORMATION_SCHEMA Name SHOW Name Remarks
GRANTEE ' user_name'@'host_name' value
TABLE_CATALOGNULL
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
PRIVILEGE_TYPE
IS_GRANTABLE

Примечания:

  • В выводе из SHOW FULL COLUMNS все привилегии перечислены в одном поле и в нижнем регистре, например, select, insert, update, references. В COLUMN_PRIVILEGES имеется одна привилегия на строку верхнего регистра.

  • PRIVILEGE_TYPE может содержать одно (и только одно!) из этих значений: SELECT, INSERT, UPDATE и REFERENCES.

  • Если пользователь имеет опцию GRANT OPTION, IS_GRANTABLE должна быть YES. Иначе IS_GRANTABLE будет NO. Вывод не вносит в список GRANT OPTION как отдельную привилегию.

Следующие инструкции не эквивалентны:

SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
SHOW GRANTS ...

9.9. Таблица INFORMATION_SCHEMA CHARACTER_SETS

Таблица CHARACTER_SETS обеспечивает информацию относительно доступных наборов символов.

INFORMATION_SCHEMA Name SHOW Name Remarks
CHARACTER_SET_NAMECharset
DEFAULT_COLLATE_NAMEDefault collation
DESCRIPIONDescription MySQL extension
MAXLENMaxlen MySQL extension

Следующие инструкции эквивалентны:

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

9.10. Таблица INFORMATION_SCHEMA COLLATIONS

Таблица COLLATIONS обеспечивает информацию относительно объединений для каждого набора символов.

INFORMATION_SCHEMA Name SHOW Name Remarks
COLLATION_NAMECollation
CHARACTER_SET_NAMECharset MySQL extension
IDId MySQL extension
IS_DEFAULTDefault MySQL extension
IS_COMPILEDCompiled MySQL extension
SORTLENSortlen MySQL extension

Следующие инструкции эквивалентны:

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

9.11. Таблица INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY

Таблица COLLATION_CHARACTER_SET_APPLICABILITY указывает то, какому объединению соответствует набор символов. Столбцы эквивалентны к первым двум полям вывода SHOW COLLATION.

INFORMATION_SCHEMA Name SHOW Name Remarks
COLLATION_NAMECollation
CHARACTER_SET_NAMECharset

9.12. Таблица INFORMATION_SCHEMA TABLE_CONSTRAINTS

Таблица TABLE_CONSTRAINTS описывает, которые таблицы имеют ограничения.

INFORMATION_SCHEMA Name SHOW Name Remarks
CONSTRAINT_CATALOGNULL
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
TABLE_SCHEMA
TABLE_NAME
CONSTRAINT_TYPE

Примечания:

  • Значение CONSTRAINT_TYPE может быть UNIQUE, PRIMARY KEY или FOREIGN KEY.

  • Информация UNIQUE и PRIMARY KEY соответствует полю Key_name в выводе SHOW INDEX, если поле Non_unique равно 0.

  • Столбец CONSTRAINT_TYPE может содержать одно из этих значений: UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK. Это столбец CHAR (не ENUM). Значение CHECK недоступно, пока пакет не поддерживает CHECK.

9.13. Таблица INFORMATION_SCHEMA KEY_COLUMN_USAGE

Таблица KEY_COLUMN_USAGE описывает, которые столбцы ключа имеют ограничения.

INFORMATION_SCHEMA 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

Примечания:

  • Если ограничение внешний ключ, то это столбец внешнего ключа, не столбец, а не тот столюец, на который внешний ключ ссылается.

  • Значение ORDINAL_POSITION позиция столбца внутри ограничения, а не позиция столбца внутри таблицы. Позиции столбца пронумерованы, начиная с 1.

  • Значение POSITION_IN_UNIQUE_CONSTRAINT NULL для ограничений unique и primary-key. Для ограничений foreign-key это порядковая позиция в ключе таблицы, которая вызвана.

    Например, предположите, что имеется две таблицы с именами t1 и t3, которые имеют следующие определения:

    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;
    

    Для этих двух таблиц таблица KEY_COLUMN_USAGE имеет две строки:

    • Одна строка с CONSTRAINT_NAME = 'PRIMARY', TABLE_NAME = 't1', COLUMN_NAME = 's3', ORDINAL_POSITION = 1, POSITION_IN_UNIQUE_CONSTRAINT = NULL.

    • Одна строка с CONSTRAINT_NAME = 'CO', TABLE_NAME = 't3', COLUMN_NAME = 's2', ORDINAL_POSITION = 1, POSITION_IN_UNIQUE_CONSTRAINT = 1.

9.14. Таблица INFORMATION_SCHEMA ROUTINES

Таблица ROUTINES обеспечивает информацию относительно сохраненных подпрограмм (процедуры и функций). Таблица ROUTINES не включает определяемые пользователем функции (UDF).

Столбец mysql.proc name указывает столбец таблицы mysql.proc, который соответствует столбцу таблицы INFORMATION_SCHEMA.ROUTINES.

INFORMATION_SCHEMA Name mysql.proc Name Remarks
SPECIFIC_NAMEspecific_name
ROUTINE_CATALOG NULL
ROUTINE_SCHEMAdb
ROUTINE_NAMEname
ROUTINE_TYPEtype {PROCEDURE|FUNCTION}
DTD_IDENTIFIER (data type descriptor)
ROUTINE_BODYSQL
ROUTINE_DEFINITIONbody
EXTERNAL_NAME NULL
EXTERNAL_LANGUAGElanguage NULL
PARAMETER_STYLE SQL
IS_DETERMINISTICis_deterministic
SQL_DATA_ACCESSsql_data_access
SQL_PATH NULL
SECURITY_TYPEsecurity_type
CREATEDcreated
LAST_ALTEREDmodified
SQL_MODEsql_mode MySQL extension
ROUTINE_COMMENTcomment MySQL extension
DEFINERdefiner MySQL extension

Примечания:

  • MySQL вычисляет EXTERNAL_LANGUAGE так:

    • Если mysql.proc.language='SQL', EXTERNAL_LANGUAGE равен NULL

    • Иначе EXTERNAL_LANGUAGE равен mysql.proc.language. Однако, пока не имеется внешних языков, так что это всегда NULL.

9.15. Таблица INFORMATION_SCHEMA VIEWS

Таблица VIEWS обеспечивает информацию относительно view в базах данных. Вы должны иметь привилегию SHOW VIEW, чтобы обратиться к этой таблице.

INFORMATION_SCHEMA Name SHOW Name Remarks
TABLE_CATALOG NULL
TABLE_SCHEMA
TABLE_NAME
VIEW_DEFINITION
CHECK_OPTION
IS_UPDATABLE
DEFINER
SECURITY_TYPE

Примечания:

  • Столбец VIEW_DEFINITION показывает большинство из того, что Вы видите в поле Create Table, которое выводится SHOW CREATE VIEW. Пропустите слова перед SELECT и перед WITH CHECK OPTION. Предположите, что первоначальная инструкция была такой:

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

    Затем определение этого view выглядит следующим образом:

    SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
    
  • Столбец CHECK_OPTION всегда имеет значение NONE.

  • Столбец IS_UPDATABLE равен YES, если view обновляемый, в противном случае NO.

  • Столбец DEFINER указывает, кто определил view. SECURITY_TYPE имеет значение DEFINER или INVOKER.

9.16. Таблица INFORMATION_SCHEMA TRIGGERS

Таблица TRIGGERS обеспечивает информацию относительно триггеров. Вы должны иметь привилегию SUPER, чтобы обратиться к этой таблице.

INFORMATION_SCHEMA Name SHOW Name Remarks
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 MySQL extension
DEFINER MySQL extension

Примечания:

  • Столбцы TRIGGER_SCHEMA и TRIGGER_NAME содержат имя базы данных, в которой находится триггер и его имя, соответственно.

  • Столбец EVENT_MANIPULATION содержит одно из значений 'INSERT', 'DELETE' или 'UPDATE'.

  • Каждый триггер связан точно с одной таблицей. Столбцы EVENT_OBJECT_SCHEMA и EVENT_OBJECT_TABLE содержат базу данных, в которой эта таблица расположена, и имя таблицы.

  • Инструкция ACTION_ORDER содержит порядковую позицию действия триггера внутри списка подобных в той же самой таблице. В настоящее время это значение всегда 0, потому что невозможно иметь больше, чем один триггер с теми же самыми EVENT_MANIPULATION и ACTION_TIMING на той же самой таблице.

  • Столбец ACTION_STATEMENT содержит инструкцию, которая будет выполнена, когда вызывается триггер. Это текст, отображаемый в столбце Statement вывода SHOW TRIGGERS. Обратите внимание, что на эти тексты распространяется кодирование в UTF-8.

  • Столбец ACTION_ORIENTATION всегда содержит значения 'ROW'.

  • Столбец ACTION_TIMING содержит одно из двух значений: 'BEFORE' или 'AFTER'.

  • Столбцы ACTION_REFERENCE_OLD_ROW и ACTION_REFERENCE_NEW_ROW содержат старые и новые идентификаторы столбцов, соответственно. Это означает, что ACTION_REFERENCE_OLD_ROW всегда содержит значение 'OLD' и ACTION_REFERENCE_NEW_ROW 'NEW'.

  • Столбец SQL_MODE показывает режим сервера SQL, который был установлен, когда триггер был создан (и таким образом, который остается в силе для триггера, когда это вызывается, независимо от текущей ситуации). Возможный диапазон значений для этого столбца такой же, как для переменной системы sql_mode.

  • Столбец DEFINER был добавлен в MySQL 5.1.2. DEFINER указывает, кто определил триггер.

  • Следующие столбцы в настоящее время всегда содержат NULL: TRIGGER_CATALOG, EVENT_OBJECT_CATALOG, ACTION_CONDITION, ACTION_REFERENCE_OLD_TABLE, ACTION_REFERENCE_NEW_TABLE и CREATED.

Пример, используем 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

9.17. Таблица INFORMATION_SCHEMA PLUGINS

Таблица PLUGINS обеспечивает информацию относительно расширений сервера.

INFORMATION_SCHEMA Name SHOW Name Remarks
PLUGIN_NAMEName MySQL extension
PLUGIN_VERSIONMySQL extension
PLUGIN_STATUSStatus MySQL extension
PLUGIN_TYPEType MySQL extension
PLUGIN_TYPE_VERSION MySQL extension
PLUGIN_LIBRARYLibrary MySQL extension
PLUGIN_LIBRARY_VERSION MySQL extension
PLUGIN_AUTHORMySQL extension
PLUGIN_DESCRIPTION MySQL extension

Примечания:

  • Таблица PLUGINS ненормативная. Это было добавлено в MySQL 5.1.5.

9.18. Таблица INFORMATION_SCHEMA ENGINES

Таблица ENGINES обеспечивает информацию относительно типов памяти.

INFORMATION_SCHEMA Name SHOW Name Remarks
ENGINEEngine MySQL extension
SUPPORTSupport MySQL extension
COMMENTComment MySQL extension
TRANSACTIONSTransactions MySQL extension
XAXA MySQL extension
SAVEPOINTSSavepoints MySQL extension

Примечания:

  • Таблица ENGINES ненормативная. Это было добавлено в MySQL 5.1.5.

9.19. Таблица INFORMATION_SCHEMA PARTITIONS

Таблица PARTITIONS обеспечивают информацию относительно разделов таблицы.

INFORMATION_SCHEMA Name SHOW Name Remarks
TABLE_CATALOGMySQL extension
TABLE_SCHEMA MySQL extension
TABLE_NAME MySQL extension
PARTITION_NAMEMySQL extension
SUBPARTITION_NAME MySQL extension
PARTITION_ORDINAL_POSITION MySQL extension
SUBPARTITION_ORDINAL_POSITION MySQL extension
PARTITION_METHOD MySQL extension
SUBPARTITION_METHOD MySQL extension
PARTITION_EXPRESSION MySQL extension
SUBPARTITION_EXPRESSION MySQL extension
PARTITION_DESCRIPTION MySQL extension
TABLE_ROWS MySQL extension
AVG_ROW_LENGTHMySQL extension
DATA_LENGTH MySQL extension
MAX_DATA_LENGTH MySQL extension
INDEX_LENGTH MySQL extension
DATA_FREE MySQL extension
CREATE_TIME MySQL extension
UPDATE_TIME MySQL extension
CHECK_TIME MySQL extension
CHECKSUM MySQL extension
PARTITION_COMMENT MySQL extension
NODEGROUP MySQL extension
TABLESPACE_NAME MySQL extension

Примечания:

  • Таблица PARTITIONS ненормативная. Это было добавлено в MySQL 5.1.6.

    Каждая запись в этой таблице соответствует индивидуальному разделу или подразделу разбитой на разделы таблицы.

  • TABLE_CATALOG: Этот столбец всегда NULL.

  • TABLE_SCHEMA: Этот столбец содержит имя базы данных, которой таблица принадлежит.

  • TABLE_NAME: Этот столбец содержит имя таблицы, содержащей раздел.

  • PARTITION_NAME: Этот столбец содержит имя раздела.

  • SUBPARTITION_NAME: Если запись таблицы PARTITIONS представляет подраздел, то этот столбец содержит имя подраздела, иначе это NULL.

  • PARTITION_ORDINAL_POSITION: Все разделы индексированы в том же самом порядке, в каком они определены, 1 является номером, назначенным первому разделу. Индексация может изменяться, когда разделы добавлены, удалены и реорганизованы. Показанный номер в этом столбце отражает текущий порядок, принимая во внимание любые изменения индексации.

  • SUBPARTITION_ORDINAL_POSITION: Подразделы внутри данного раздела также индексированы и повторно проиндексированы тем же самым способом, каким все разделы индексированы внутри таблицы.

  • PARTITION_METHOD: Одно из значений RANGE, LIST, HASH, LINEAR HASH, KEY или LINEAR KEY. То есть, один из типов доступного выделения разделов.

  • SUBPARTITION_METHOD: Одно из значений HASH, LINEAR HASH, KEY или LINEAR KEY. То есть, один из типов доступного выделения подразделов.

  • PARTITION_EXPRESSION: Это выражение для функции выделения разделов, используемой в инструкции CREATE TABLE или ALTER TABLE, которая создала текущую схему выделения разделов таблицы.

    Например, рассмотрите разбитую на разделы таблицу, созданную в базе данных test, используя эту инструкцию:

    CREATE TABLE tp (c1 INT, c2 INT,
           c3 VARCHAR(25)) PARTITION
           BY HASH(c1 + c2) PARTITIONS 4;
    

    Столбец в записи PARTITION_EXPRESSION в записи таблицы PARTITIONS для раздела из этой таблицы отображает c1+c2, как показано здесь:

    mysql> SELECT DISTINCT PARTITION_EXPRESSION
         >        FROM INFORMATION_SCHEMA.PARTITIONS
         >        WHERE TABLE_NAME='tp' AND TABLE_SCHEMA='test';
    +----------------------+
    | PARTITION_EXPRESSION |
    +----------------------+
    | c1 + c2|
    +----------------------+
    1 row in set (0.09 sec)
    
  • SUBPARTITION_EXPRESSION: Это работает в том же самом режиме для выражения подвыделения разделов, которое определяет выделение подразделов для таблицы, как PARTITION_EXPRESSION делает для выражения выделения разделов, используемого, чтобы определить выделение разделов таблицы. Если таблица не имеет никаких подразделов, то этот столбец всегда хранит значение NULL.

  • PARTITION_DESCRIPTION: Этот столбец используется для разделов RANGE и LIST. Для раздела RANGE это содержит набор значений в предложении VALUES LESS THAN, которое может быть целым числом или MAXVALUE. Для раздела LIST этот столбец содержит значения, определенные в предложении VALUES IN раздела, которое является разделяемым запятыми списком целочисленных значений.

    Для разделов, чьими PARTITION_METHOD является другое, чем RANGE или LIST, этот столбец всегда будет хранить NULL.

  • TABLE_ROWS: Число строк таблиц в разделе.

  • AVG_ROW_LENGTH: средняя длина строк, сохраненных в этом разделе или подразделе, в байтах.

    Это вычисляется как DATA_LENGTH разделенное на TABLE_ROWS.

  • DATA_LENGTH: Общая длина всех строк, сохраненных в этом разделе или подразделе, в байтах. То есть, общее число байтов, сохраненных в разделе или подразделе.

  • MAX_DATA_LENGTH: Максимальное число байтов, которые могут быть сохранены в этом разделе или подразделе.

  • INDEX_LENGTH: Длина индексного файла для этого раздела или подраздела в байтах.

  • DATA_FREE: Число байт, распределенных разделу или подразделу, но им не используемых.

  • CREATE_TIME: Время создания раздела или подраздела.

  • UPDATE_TIME: Время, когда раздел или подраздел был в последний раз изменен.

  • CHECK_TIME: Последний раз, когда таблица, которой этот раздел или подраздел принадлежит, была проверена.

    Обратите внимание: некоторые типы памяти не модифицируют это время. Для таблиц, использующих эти типы памяти, это значение всегда NULL.

  • CHECKSUM: Значение контрольной суммы, если есть. Иначе этот столбец NULL.

  • PARTITION_COMMENT: Этот столбец содержит текст любого комментария, сделанного для раздела.

    Значение по умолчанию для этого столбца: пустая строка.

  • NODEGROUP: Это группа узлов, которой раздел принадлежит. Это релевантно только для таблиц MySQL Cluster, иначе значение этого столбца всегда 0.

  • TABLESPACE_NAME: Этот столбец содержит имя места таблицы, которому раздел принадлежит. В MySQL 5.1 значение этого столбца всегда DEFAULT.

  • Важно: если любые разбитые на разделы таблицы, созданные в MySQL версии до MySQL 5.1.6 присутствуют после обновления до MySQL 5.1.6 или позже, невозможен SELECT из, SHOW или DESCRIBE таблиц PARTITIONS.

  • Не разбитая на разделы таблица имеет одну запись в INFORMATION_SCHEMA.PARTITIONS, однако, значения столбцов PARTITION_NAME, SUBPARTITION_NAME, PARTITION_ORDINAL_POSITION, SUBPARTITION_ORDINAL_POSITION, PARTITION_METHOD, SUBPARTITION_METHOD, PARTITION_EXPRESSION, SUBPARTITION_EXPRESSION и PARTITION_DESCRIPTION все NULL. Столбец PARTITION_COMMENT в этом случае пуст.

    В MySQL 5.1 имеется также только одна запись в таблице PARTITIONS для таблицы, использующей NDBCluster. Те же самые столбцы также NULL (или пусты), как и для не разбитой на разделы таблицы.

9.20. Таблица INFORMATION_SCHEMA EVENTS

Таблица EVENTS обеспечивает информацию относительно планируемых событий.

INFORMATION_SCHEMA Name SHOW Name Remarks
EVENT_CATALOGNULL, MySQL extension
EVENT_SCHEMADb MySQL extension
EVENT_NAMEName MySQL extension
DEFINER DefinerMySQL extension
EVENT_BODY MySQL extension
EVENT_DEFINITION MySQL extension
EVENT_TYPEType MySQL extension
EXECUTE_ATExecute at MySQL extension
INTERVAL_VALUEInterval value MySQL extension
INTERVAL_FIELDInterval field MySQL extension
SQL_MODE MySQL extension
STARTSStarts MySQL extension
ENDSEnds MySQL extension
STATUSStatus MySQL extension
ON_COMPLETION MySQL extension
CREATED MySQL extension
LAST_ALTERED MySQL extension
LAST_EXECUTEDMySQL extension
EVENT_COMMENTMySQL extension

Примечания:

  • Таблица EVENTS ненормативная. Это было добавлено в MySQL 5.1.6.

  • EVENT_CATALOG: значение этого столбца всегда NULL.

  • EVENT_SCHEMA: имя схемы (базы данных), которой это событие принадлежит.

  • EVENT_NAME: имя события.

  • DEFINER: пользователь, который создал событие. Всегда отображается в формате 'user_name'@'host_name' .

  • EVENT_BODY: Язык, используемый для инструкций в предложении DO события, в MySQL 5.1 это всегда SQL. Этот столбец был добавлен в MySQL 5.1.12. Это не должно быть спутано со столбцом того же самого имени (теперь называется EVENT_DEFINITION) в старых версиях MySQL.

  • EVENT_DEFINITION: текст инструкции SQL, составляющей предложение DO события, другими словами, инструкция, выполненная этим событием.

    Обратите внимание: до MySQL 5.1.12 этот столбец назывался EVENT_BODY.

  • EVENT_TYPE: одно из двух значений ONE TIME или RECURRING.

  • EXECUTE_AT: для одноразового события это значение the DATETIME, определенное в предложении AT инструкции CREATE EVENT, используемой, чтобы создать событие, или последней инструкции ALTER EVENT, которая изменила событие. Значение, показанное в этом столбце, отражает добавление или вычитание любого значения INTERVAL, включенного в предложение AT события. Например, если событие создано, используя ON SCHEDULE AT CURRENT_TIMESTAMP + '1:6' DAY_HOUR, а событие было создано в 2006-02-09 14:05:30, значение, показанное в этом столбце, будет '2006-02-10 20:05:30'.

    Если синхронизация события определена предложением EVERY вместо предложения AT (то есть, если событие повторяется), значение этого столбца NULL.

  • INTERVAL_VALUE: для многоразовых событий этот столбец содержит числовую часть предложения EVERY события.

    Для одноразового события (то есть, события, чья синхронизация определена предложением AT) значение этого столбца NULL.

  • INTERVAL_FIELD: для многоразовых событий этот столбец содержит модульную часть предложения EVERY, управляя синхронизацией события с префиксом 'INTERVAL_'. Таким образом, этот столбец содержит значение типа 'INTERVAL_YEAR', 'INTERVAL_QUARTER', 'INTERVAL_DAY' или нечто подобное. Для одноразового события значение этого столбца NULL.

  • SQL_MODE: режим SQL во время создания или изменения события.

  • STARTS: для многоразовых событий, чье определение включает предложение STARTS, этот столбец содержит соответствующее значение DATETIME. Как и со столбцом EXECUTE_AT, это значение решает любые используемые выражения.

    Если не имеется никакого предложения STARTS, воздействующего на синхронизацию события, этот столбец пуст. До MySQL 5.1.8 это содержало NULL в таких случаях.

  • ENDS: то же самое, но для предложения ENDS.

  • STATUS: одно из двух значений: ENABLED или DISABLED.

  • ON_COMPLETION: одно из двух значений: PRESERVE или NOT PRESERVE.

  • CREATED: дата и время, когда событие было создано. Это значение DATETIME.

  • LAST_ALTERED: дата и время, когда событие было в последний раз изменено. Это значение DATETIME. Если событие не изменялось, начиная с создания, этот столбец хранит то же самое значение, что и столбец CREATED.

  • LAST_EXECUTED: дата и время, когда событие в последний раз выполнилось. Значение DATETIME. Если событие никогда не выполнялось, значение этого столбца NULL.

  • EVENT_COMMENT: текст комментария, если событие его имеет. Если не имеется никакого комментария, значение этого столбца пустая строка.

Пример: предположите, что пользователь jon@ghidora создает событие e_daily, а затем изменяет его через несколько минут, используя инструкцию ALTER EVENT, как показано здесь:

DELIMITER |
CREATE EVENT e_daily ON SCHEDULE EVERY 1 DAY
       STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR DISABLE
       COMMENT 'Saves total number of sessions and
                clears the table once per day.'
       DO BEGIN INSERT INTO site_activity.totals (when, total)
       SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions;
       DELETE FROM site_activity.sessions;
   END |
DELIMITER ;
ALTER EVENT e_daily ENABLED;

Обратите внимание, что комментарии могут охватывать много строк.

Этот пользователь может затем выполнять следующую инструкцию SELECT и получать показанный вывод:

mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS
     >          WHERE EVENT_NAME = 'e_daily' AND
     >          EVENT_SCHEMA = 'myschema'\G

*************************** 1. row ***************************
EVENT_CATALOG: NULL
EVENT_SCHEMA: myschema
EVENT_NAME: e_daily
DEFINER: jon@ghidora
EVENT_BODY: BEGIN
   INSERT INTO site_activity.totals (when, total)
   SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions;
   DELETE FROM site_activity.sessions;
END
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 1
INTERVAL_FIELD: INTERVAL_DAY
SQL_MODE: NULL
STARTS: 2006-02-09 10:41:23
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: DROP
CREATED: 2006-02-09 14:35:35
LAST_ALTERED: 2006-02-09 14:41:23
LAST_EXECUTED: NULL
EVENT_COMMENT: Saves total number of sessions and
               clears the table once per day.
1 row in set (0.50 sec)

Важно: времена, отображаемые столбцами STARTS, ENDS и LAST_EXECUTED в настоящее время даны в терминах универсального времени (GMT или UTC), независимо от установки часового пояса сервера. Это верно и для столбцов starts, ends и last_executed в таблице mysql.event, а также для столбцов Starts и Ends в таблице SHOW [FULL] EVENTS. Зато столбцы CREATED и LAST_ALTERED используют часовой пояс сервера (также, как столбцы created и last_altered в таблице mysql.event), чтобы Вам жизнь медом не казалась.

Например, событие e_daily, показанное ранее, было создано на компьютере в Brisbane, Australia, в 14:35:35 9 февраля 2006. Восточное стандартное время Австралии, которое также может быть выражено как GMT+10.00. Определение события модифицировалось (используя ALTER EVENT) на несколько минут позже, в 14:41:23. Это значения, отображаемые для CREATED и LAST_ALTERED. Событие планируется, чтобы начать выполнять 6 часов спустя, в 20:41:23 в тот же самый лень, по местному времени. Вычитание 10 часов из этого, чтобы получить универсальное время выдает 10:41:23, и это то значение, которое показывается для STARTS.

На это использование универсального времени нельзя положиться в прикладных программах, поскольку ожидается изменить на сервере местное время (Глюк #16420).

9.21. Таблица INFORMATION_SCHEMA FILES

Таблица FILES обеспечивает информацию относительно файлов, в которых сохранены данные дисковых таблиц MySQL NDB.

INFORMATION_SCHEMA Name SHOW Name Remarks
FILE_ID MySQL extension
FILE_NAME MySQL extension
FILE_TYPE MySQL extension
TABLESPACE_NAME MySQL extension
TABLE_CATALOG MySQL extension
TABLE_SCHEMA MySQL extension
TABLE_NAME MySQL extension
LOGFILE_GROUP_NAME MySQL extension
LOGFILE_GROUP_NUMBER MySQL extension
ENGINE MySQL extension
FULLTEXT_KEYS MySQL extension
DELETED_ROWS MySQL extension
UPDATE_COUNT MySQL extension
FREE_EXTENTS MySQL extension
TOTAL_EXTENTS MySQL extension
EXTENT_SIZE MySQL extension
INITIAL_SIZE MySQL extension
MAXIMUM_SIZE MySQL extension
AUTOEXTEND_SIZE MySQL extension
CREATION_TIME MySQL extension
LAST_UPDATE_TIME MySQL extension
LAST_ACCESS_TIME MySQL extension
RECOVER_TIME MySQL extension
TRANSACTION_COUNTER MySQL extension
VERSION MySQL extension
ROW_FORMAT MySQL extension
TABLE_ROWS MySQL extension
AVG_ROW_LENGTH MySQL extension
DATA_LENGTH MySQL extension
MAX_DATA_LENGTH MySQL extension
INDEX_LENGTH MySQL extension
DATA_FREE MySQL extension
CREATE_TIME MySQL extension
UPDATE_TIME MySQL extension
CHECK_TIME MySQL extension
CHECKSUM MySQL extension
STATUS MySQL extension
EXTRA MySQL extension

Примечания:

  • FILE_ID значения столбца автосгенерированы.

  • FILE_NAME имя журнала UNDO, созданного CREATE LOGFILE GROUP или ALTER LOGFILE GROUP, либо файла данных, созданного CREATE TABLESPACE или ALTER TABLESPACE.

  • FILE_TYPE одно из значений UNDOFILE или DATAFILE.

  • TABLESPACE_NAME имя пространства таблиц, с которым файл связан.

  • В MySQL 5.1 значение столбца TABLESPACE_CATALOG всегда NULL.

  • TABLE_NAME имя дисковой таблицы данных, с которой файл связан, если есть.

  • Столбец LOGFILE_GROUP_NAME дает имя группы журнала, которой журнал или файл данных принадлежит.

  • Для журнала UNDO LOGFILE_GROUP_NUMBER содержит автосгенерированный номер ID группы журналов, к которой журнал принадлежит.

  • Для журнала данных MySQL Cluster или файла данных, значение столбца ENGINE всегда NDB или NDBCLUSTER.

  • Для журнала данных MySQL Cluster или файла данных, значение столбца FULLTEXT_KEYS всегда пусто.

  • Столбец FREE EXTENTS отображает число блоков, которые еще не использовались файлом. Столбец TOTAL EXTENTS показывает общее число блоков, распределенных файлу.

    Различие между этими двумя столбцами: число блоков, используемых в настоящее время файлом:

    SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used
           FROM INFORMATION_SCHEMA.FILES
           WHERE FILE_NAME = 'myfile.dat';
    

    Вы можете аппроксимировать количество дискового пространства, находящегося в использовании файлом, умножая это различие на значение столбца EXTENT_SIZE, который дает размер блока для файла в байтах:

    SELECT (TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE AS bytes_used
           FROM INFORMATION_SCHEMA.FILES
           WHERE FILE_NAME = 'myfile.dat';
    

    Точно так же Вы можете оценивать количество места, которое остается доступным в данном файле, умножая FREE_EXTENTS на EXTENT_SIZE:

    SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free
           FROM INFORMATION_SCHEMA.FILES
           WHERE FILE_NAME = 'myfile.dat';
    

    Важно: значения байт, произведенные предшествующими запросами только приближения, и их точность обратно пропорциональна значению EXTENT_SIZE. То есть, больший EXTENT_SIZE становится менее точным.

    Также важно не забыть, что, если только блок используется, это не может быть освобождено снова без того, чтобы удалить файл данных, частью которого блок является. Это означает, что удаление из дисковой таблицы данных не освобождает дисковое пространство.

    Размер блока может быть установлен в инструкции CREATE TABLESPACE.

  • Столбец INITIAL_SIZE показывает размер в байтах файла. Это то же самое значение, которое использовалось в предложении INITIAL_SIZE команд CREATE LOGFILE GROUP, ALTER LOGFILE GROUP, CREATE TABLESPACE или ALTER TABLESPACE использовавшихся, чтобы создать файл.

    Для файлов MySQL 5.1 Cluster Disk Data значение столбца MAXIMUM_SIZE всегда такое же, как INITIAL_SIZE, а столбец AUTOEXTEND_SIZE всегда пуст.

  • Столбец CREATION_TIME показывает дату и время, когда файл был создан. LAST_UPDATE_TIME отображает дату и время, когда файл был последний раз изменен. LAST_ACCESSED обеспечивает дату и время, когда к файлу последний раз обращался сервер.

    В настоящее время значения этих столбцов сообщены операционной системой и не обеспечены NDB. Там, где никакое значение не обеспечивается операционной системой, эти столбцы отображаются 0000-00-00 00:00:00.

  • Для файлов данных MySQL Cluster значение столбцов RECOVER_TIME и TRANSACTION_COUNTER всегда 0.

  • Для файлов данных MySQL 5.1 Cluster следующие столбцы всегда NULL:

    • VERSION

    • ROW_FORMAT

    • TABLE_ROWS

    • AVG_ROW_LENGTH

    • DATA_LENGTH

    • MAX_DATA_LENGTH

    • INDEX_LENGTH

    • DATA_FREE

    • CREATE_TIME

    • UPDATE_TIME

    • CHECK_TIME

    • CHECKSUM

  • Для файлов данных MySQL Cluster значение столбца STATUS всегда NORMAL.

  • Для файлов данных MySQL Cluster столбец EXTRA показывает, которому узлу данных принадлежит файл, поскольку каждый узел данных имеет собственную копию файла. Например, предположите, что Вы используете эту инструкцию относительно MySQL Cluster с четырьмя узлами данных:

    CREATE LOGFILE GROUP mygroup
           ADD UNDOFILE 'new_undo.dat'
           INITIAL_SIZE 2G ENGINE NDB;
    

    После удачного выполнения инструкции CREATE LOGFILE GROUP Вы должны видеть результат, подобный показанному здесь для этого запроса к таблице FILES:

    mysql> SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA
        ->        FROM INFORMATION_SCHEMA.FILES
        ->        WHERE FILE_NAME = 'new_undo.dat';
    +--------------------+-----------+----------------+
    | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA          |
    +--------------------+-----------+----------------+
    | mygroup            | UNDO FILE | CLUSTER_NODE=3 |
    | mygroup            | UNDO FILE | CLUSTER_NODE=4 |
    | mygroup            | UNDO FILE | CLUSTER_NODE=5 |
    | mygroup            | UNDO FILE | CLUSTER_NODE=6 |
    +--------------------+-----------+----------------+
    4 rows in set (0.01 sec)
    
  • Таблица FILES ненормативная. Это было добавлено в MySQL 5.1.6.

  • Не имеется никаких команд SHOW, связанных с таблицей FILES.

9.22. Таблица INFORMATION_SCHEMA PROCESSLIST

Таблица PROCESSLIST обеспечивает информацию, относительно выполняемых сервером потоков.

INFORMATION_SCHEMA Name SHOW Name Remarks
IDIdMySQL extension
USERUserMySQL extension
HOSTHost MySQL extension
DBdb MySQL extension
COMMANDCommand MySQL extension
TIMETime MySQL extension
STATEState MySQL extension
INFOInfo MySQL extension

Примечания:

  • Таблица PROCESSLIST ненормативная. Это было добавлено в MySQL 5.1.7.

  • Подобно выводу из соответствующей инструкции SHOW, таблица PROCESSLIST покажет информацию только относительно Ваших собственных потоков, если Вы не имеете привилегию PROCESS, тогда Вы будете видеть информацию относительно других потоков. Как анонимный пользователь Вы не можете видеть любые строки вообще.

  • Если инструкция SQL обращается INFORMATION_SCHEMA.PROCESSLIST, MySQL заполнит всю таблицу один раз, когда, операторное выполнение начинается, так что гарантируется непротиворечивость чтения в течение инструкции. Не имеется никакой непротиворечивости чтения для многооператорной транзакции.

Следующие инструкции эквивалентны:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
SHOW PROCESSLIST

9.23. Таблица INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS

Таблица REFERENTIAL_CONSTRAINTS обеспечивает информацию относительно внешних ключей.

INFORMATION_SCHEMA Name SHOW Name Remarks
CONSTRAINT_CATALOG NULL
CONSTRAINT_SCHEMA
CONSTRAINT_NAME
UNIQUE_CONSTRAINT_CATALOG NULL
UNIQUE_CONSTRAINT_SCHEMA
UNIQUE_CONSTRAINT_NAME
MATCH_OPTION
UPDATE_RULE
DELETE_RULE
TABLE_NAME

Примечания:

  • Таблица REFERENTIAL_CONSTRAINTS была добавлена в MySQL 5.1.10.

  • TABLE_NAME имеет то же самое значение, что и TABLE_NAME в INFORMATION_SCHEMA.TABLE_CONSTRAINTS.

  • CONSTRAINT_SCHEMA и CONSTRAINT_NAME идентифицируют внешний ключ.

  • UNIQUE_CONSTRAINT_SCHEMA и UNIQUE_CONSTRAINT_NAME идентифицируют вызванный ключ.

  • Единственное допустимое значение в это время для MATCH_OPTION: NONE.

  • Возможные значения для UPDATE_RULE или DELETE_RULE: CASCADE, SET NULL, SET DEFAULT, RESTRICT, NO ACTION.

9.24. Таблицы INFORMATION_SCHEMA GLOBAL_STATUS и SESSION_STATUS

Таблицы GLOBAL_STATUS и SESSION_STATUS обеспечивают информацию относительно переменных состояния сервера. Их содержание соответствует информации, произведенной инструкциями SHOW GLOBAL STATUS и SHOW SESSION STATUS.

INFORMATION_SCHEMA Name SHOW Name Remarks
VARIABLE_NAMEVariable_name
VARIABLE_VALUEValue

Примечания:

  • Таблицы GLOBAL_STATUS и SESSION_STATUS были добавлены в MySQL 5.1.12.

  • Столбец VARIABLE_VALUE имеет тип BIGINT. Немногие переменные состояния, которые имеют значения нецелого числа, приведены к значениям BIGINT.

9.25. Таблицы INFORMATION_SCHEMA GLOBAL_VARIABLES и SESSION_VARIABLES

Таблицы GLOBAL_VARIABLES и SESSION_VARIABLES обеспечивают информацию относительно переменных состояния сервера. Их содержание соответствует информации, произведенной инструкциями SHOW GLOBAL VARIABLES и SHOW SESSION VARIABLES.

INFORMATION_SCHEMA Name SHOW Name Remarks
VARIABLE_NAMEVariable_name
VARIABLE_VALUEValue

Примечания:

  • Таблицы GLOBAL_VARIABLES и SESSION_VARIABLES были добавлены в MySQL 5.1.12.

9.26. Другие таблицы INFORMATION_SCHEMA

Авторы предполагают выполнять дополнительные таблицы в INFORMATION_SCHEMA. В частности, они подтверждают потребность в таблице PARAMETERS.

9.27. Расширения инструкции SHOW

Некоторые расширения к инструкциям SHOW сопровождают реализацию INFORMATION_SCHEMA:

  • SHOW может использоваться, чтобы получить информацию относительно структуры INFORMATION_SCHEMA.

  • Несколько инструкций SHOW принимают предложение WHERE, которое обеспечивает большее количество гибкости в определении того, которые строки отобразить.

INFORMATION_SCHEMA информационная база данных, так что имя включено в вывод из SHOW DATABASES. Точно так же SHOW TABLES может использоваться с INFORMATION_SCHEMA, чтобы получить список таблиц:

mysql> SHOW TABLES FROM INFORMATION_SCHEMA;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| KEY_COLUMN_USAGE                      |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| STATISTICS                            |
| TABLES                                |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
+---------------------------------------+
22 rows in set (0.04 sec)

SHOW COLUMNS и DESCRIBE могут отображать информацию относительно столбцов в индивидуальных таблицах INFORMATION_SCHEMA.

Несколько инструкций SHOW были расширены, чтобы позволить предложение 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

Предложение WHERE, если представлено, оценено для имен столбцов, отображаемых инструкцией SHOW. Например, инструкция SHOW CHARACTER SET производит эти столбцы вывода:

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

Используя предложение WHERE с SHOW CHARACTER SET, Вы обратились бы к тем именам столбца. Например, следующий оператор отображает информацию относительно наборов символов, для которых заданное по умолчанию объединение содержит строку '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      |
+---------+---------------------------+---------------------+--------+

Эта инструкция отображает многобайтовые наборы символов:

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

9.28. MySQL 5 FAQ INFORMATION_SCHEMA

9.28.1: Имеется ли форум для обсуждения INFORMATION_SCHEMA?

Да. http://forums.mysql.com/list.php?101.

9.28.2: Где я могу найти спецификацию ANSI SQL 2003 для INFORMATION_SCHEMA?

К сожалению, официальные спецификации недоступны свободно. ANSI делает их доступными только за денежку. Однако, имеются доступные книги, например, SQL-99 Complete, Really by Peter Gulutzan and Trudy Pelzer, которые дают всесторонний краткий обзор стандарта, включая INFORMATION_SCHEMA.

9.28.3: Каково различие между Oracle Data Dictionary и MySQL INFORMATION_SCHEMA?

Oracle и MySQL обеспечивают метаданные в таблицах. Однако, Oracle и MySQL используют различные имена таблиц и столбцов. Реализация MySQL более подобна DB2 и SQL Server, которые также поддерживают INFORMATION_SCHEMA как определено в стандарте SQL.

9.28.4: Я могу изменять таблицы, найденные в базе данных INFORMATION_SCHEMA?

Нет. Прикладные программы могут полагаться на некоторую стандартную структуру, и это не должно измениться. По этой причине MySQL AB не может поддерживать ошибки или другие проблемы, которые следуют из изменения таблиц или данных в INFORMATION_SCHEMA.

Поиск

 

Найди своих коллег!