Поиск

Синтаксис SET и SHOW

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

Если синтаксис данного оператора SHOW включает часть LIKE 'шаблон*, то 'шаблон* — это строка, которая может содержать символы SQL-шаблонов '%' и '_'. Шаблон (pattern) применяется для ограничения вывода только соответствующими значениями.
Отметим, что существуют и другие формы этих операторов, описанные в других местах:

  • Оператор SET PASSWORD - для присвоения пароля пользовательской учетной записи.
м Оператор SHOW имеет формы, предоставляющие информацию о главных и подчи­ненных серверах в репликации:
SHOW BINLOG EVENTS SHOW MASTER LOGS SHOW MASTER STATUS SHOW SLAVE HOSTS SHOW SLAVE STATUS
Эти формы SHOW описаны в разделе Операторы репликации
Синтаксис SET
SET присваивзние_переменной [, присваивание_переменной] ...
присв аив ание_ переменной:
имя пользовательской_переменной - выражение | [GLOBAL|SESSION] имя__системной_переменной = выражение I @@[global.|session.] имя_системной__переменной = выражение

Оператор SET устанавливает значение различным типам переменных, которые влия­ют на работу сервера и клиента. Он может применяться для присвоения значений поль­зовательским и системным переменным.
В MySQL 4.0.3 были добавлены опции GLOBAL и SESSION, а также была обеспечена возможность наиболее важным системным переменным изменяться динамически в про­цессе работы.
В более старых версиях MySQL использовалась опция SET OPTION вместо SET, но на данный момент она устарела. Просто опускайте слово OPTION.
Следующие примеры показывают различный синтаксис, который используется для установки переменных.
Пользовательская переменная записывается как ®имя_переменной и может быть ус­тановлена следующим образом:
SET @имя_леремеяяой = выражение;
Более подробная информация о пользовательских переменных представлена в разделе Пользовательские переменные
К системным переменным в операторе SET можно обращаться как к имя^переменной. Имени может предшествовать необязательное слово GLOBAL или @@global. для явного указания, что это глобальная переменная, либо SESSION или @@session. - что это пере­менная сеанса. LOCAL и @@1оса1. -синонимы SESSION и @@session..
Если не указан ни один модификатор, SET устанавливает переменные сеанса.
Синтаксис §Ымя_переменной для системных переменных поддерживается MySQL с целью обеспечения совместимости с некоторыми другими системами баз данных.

<При установке нескольких системных переменных в одном операторе, последняя опция GLOBAL или SESSION применяется для переменных, для которых модификатор не указан.
SET sort_buffer_size=10000;
SET @@local.sort_buffer_size=10000;
SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@global.sort_bufferjsize=1000000, @@local.sort__buffer_size=1000000;
Если вы устанавливаете системную переменную, используя SESSION (по умолчанию), ее значение остается в силе до конца сеанса либо до того момента, когда ей будет при­своено другое значение. Если вы устанавливаете системную переменную, указав слово GLOBAL, что требует привилегии SUPER, ее значение запоминается и используется в новых соединениях до тех пор, пока сервер не будет перезапущен. Если вы хотите сделать ус­тановку переменной неизменяемой, вы должны поместить ее в файл опций.
Чтобы предотвратить неправильное использование, MySQL генерирует ошибку, если вы применяете SET GLOBAL с переменной, которую можно использовать только с SET SESSION, либо если вы не указываете GLOBAL, устанавливая значение глобальной переменной.
Если вы хотите установить переменную сеанса в значение GLOBAL или значение GLOBAL в заранее скомпилированное в MySQL значение по умолчанию, можете устанав­ливать их в DEFAULT. Например, следующие два оператора идентичны и устанавливают переменную сеанса max_join_size в глобальное значение:
SET max_join_size=DEFAULT;
SET @@session.max_Join_size=@@global.max_join_size;
Список большинства системных переменных можно получить оператором SHOW variables. См. раздел Синтаксис SHOW VARIABLES Чтобы получить отдельную переменную по имени, или список переменных с именами, соответствующими шаблону, воспользуйтесь конструкцией LIKE:
SHOW VARIABLES LIKE 'max_join_size';
SHOW GLOBAL VARIABLES LIKE 'max_join_size';
Вы также можете получить значение специфической переменной с помощью синтак­сиса @@ [global. | local. ] имя_переменной в операторе SELECT:
SELECT @@max_join_size, @@global.max_join_size;
Когда вы запрашиваете переменную в операторе SELECT %Ымя_переменной (то есть, без указания global., session., local.), MySQL возвращает значение SESSION, если оно существует, и global - в противном случае.
В следующем списке представлены переменные, которые имеют нестандартный син­таксис либо не приводятся в списке системных переменных в книге MySQL. Руководство администратора (М. : Издательский дом "Вильяме", 2005, ISBN 5-8459-0805-1). Несмотря на то что эти переменные не отображаются через SHOW VARIABLES, вы можете получить их значения с помощью оператора SELECT (за исключением CHARACTER SET или NAMES). Например:
mysql> SELECT @@AUTOCOMMIT;

  • AUTOCOMMIT = {0 | 1}. Устанавливает режим автоматического завершения транзакций. Если установлено значение 1, все изменения в данных таблиц вступают в силу немедленно. Если установлено значение 0, вы обязаны завершить транзакцию явно оператором COMMIT либо отменить ее с помощью RulLBACK. Если вы переключаете AUTOCOMMIT с 0 на 1, MySQL выполняет автоматический COMMIT для всех активных транзакций. Другой способ начать транзакцию - это использовать оператор START TRANSACTION или BEGIN. См. раздел Синтаксис START TRANSACTION, COMMIT и RulLBACK
  • BIGJTABLES = {0 | 1}. Если установлена в 1, все временные таблицы сохраняются на диске вместо того, чтобы сохраняться в памяти. Это немного медленнее, однако при выполнении оператора SELECT, который требует создания большой временной таблицы, не возникает ошибка The table имя_таблицы is full (Таблицаимягпаблицы переполнена). Значением по умолчанию для новых соединений является 0 (размещать временные таблицы в памяти). Начиная с MySQL 4.0, вам, как правило, не придется устанавливать эту переменную, поскольку MySQL сам в случае необходимости преобразует временные таблицы в памяти в таблицы на диске. Ранее эта переменная называлась SQLBIGTABLES.
  • CHARACTER SET {имя_набора_символов | DEFAULT}. Это передает все строки от клиента и обратно с заданным отображением. До версии MySQL 4.1 единственным допустимым значением для имя_набора_символов было cpl551_koi8, однако вы можете добавить новые варианты отображения, редактируя файл sql/convert.cc исходного дистрибутива MySQL. Начиная с MySQL 4.1, SET CHARACTER SET устанавливает три системных переменных: character_set_client и character_set_results уста навливаются в заданный набор символов, a character_set_connection - в значение character_set_database.

Отображение по умолчанию может быть восстановлено указанием default. Следует отметить, что синтаксис SET CHARACTER SET отличается от принятого для установки других большинства других опций.

  • FOREIGN_KEY_CHECKS = {О I 1}. Если установлена в 1 (по умолчанию), ограничения внешних ключей для InnoDB контролируются сервером. Если установлено в О,игнорируются. Отключение проверок внешних ключей может оказаться удобным для перезагрузки таблиц InnoDB в порядке, отличающемся оттого, который требуют их отношения родительский/дочерний. Эта переменная была добавлена в MySQL 3.23.52.
  • IDENTITY = значение. Эта переменная - синоним last_INSERT_ID. Введена с целью достижения совместимости с другими базами данных. Начиная с MySQL 3.23.25, вы можете получить ее значение с помощью SELECT ^IDENTITY. Начиная с MySQL 4.0.3, вы также можете установить ее значение через SET IDENTITY.
  • INSERT_ID = значение. Устанавливает значение, которое будет использовано следующим оператором INSERT или ALTER TABLE для вставки в столбец AUTO_INCREMENT.В основном это используется с бинарным журналом.
  • LAST INSERT ID = значение. Устанавливает значение, которое будет возвращено LAST_INSERT_ID() в операторах, обновляющих таблицу. Установка этой переменной не обновляет значения, возвращаемого функцией С API mysql_insert_id().
  • NAMES {'имя набора символов' | DEFAULT}

    SET NAMES устанавливает три системные переменные сеанса: character_set_client, character_set_connection и character_set_result в указанный набор символов. Отображение по умолчанию может быть восстановлено, если указать DEFAULT. Обратите внимание, что синтаксис SET NAMES отличается от принятого для уста­новки других большинства других опций. Этот оператор появился в MySQL 4.I .O. м SQL_AUTO_IS_NULL = {0 | 1}. Если установлена в 1 (по умолчанию), вы можете найти последнюю вставленную в таблицу строку, которая содержит столбец AUTO_INCREMENT, используя следующую конструкцию:
    WHERE столбец^ u Ьо__1ПсгетепЬ IS NULL
    Это поведение характерно для некоторых ODBC-программ, таких как Access. SQL_AUTO_IS_NULL была добавлена в MySQL 3.23.52.

    • SQL_BIG_SELECTS = {0 | 1}. Если установлена в 0, MySQL прерывает выполнение операторов SELECT, которые предположительно будут выполняться долго (го есть операторов, для которых оптимизатор ожидает, что количество проверяемых строк превысит значение max_join_size). Это удобно, когда применяются нера циональные условия в конструкции WHERE. Значение по умолчанию этой переменной для новых соединений равно 1, что разрешает выполнять любые операторы SELECT. Если вы устанавливаете значение системной переменной max join size в значение, отличное от DEFAULT, SQL__BIG_SELECTS принимает значение 0.
    • SQL_BUFFER_RESULT = {0 | 1}

    SQL_BUFFER_RESULT принуждает операторы SELECT помещать результаты во вре­менные таблицы. Это помогает MySQL освобождать табличные блокировки по­раньше и может быть выгодно в случаях, когда требуется много времени для от­правки результатов клиентам. Переменная была добавлена в MySQL 3.23.13.

    • SQL__LOG BIN = {0 | 1}. Если установлена в 0, никакой бинарной регистрации для клиента не выполняется. Клиент должен иметь привилегию SUPER для установки этой опции. Переменная была добавлена в MySQL 3.23.16.
    • SQL_LOG_OFF = {0 | 1}. Если установлена в 1, регистрация запросов клиента в общем журнале не ведется. Клиент должен иметь привилегию SUPER для установ ки этой опции.
    • SQL_LOG_UPDATE = {0 | 1}. Если установлена в 0, регистрация обновлений клиен та в журнале не ведется. Клиент должен иметь привилегию SUPER для установки этой опции. Переменная была добавлена в MySQL 3.23.5. Начиная с MySQL 5.0.0, считается устаревшей и отображается на SQL_LOG__BIN.
    • SQL_QUOTE_SHOW_CREATE = {0 | 1}. ЕслИ установлена В 1, SHOW CREATE TABLE ВЫ водит имена таблиц и столбцов в кавычках. Если установлена в 0, кавычки от ключаются. По умолчанию эта опция включена, чтобы репликация работала с таблицами и столбцами в кавычках. Переменная появилась в MySQL 3.23.26. См. раздел Синтаксис SHOW CREATE TABLE.
    • SQL_SAFE__UPDATES = {0 | 1}. Если установлена в 1, MySQL прерывает операторы UPDATE и DELETE, у которых не используются ключевые значения в конструкции WHERE. Это позволяет перехватывать операторы UPDATE и DELETE, у которых непра вильно используются ключи и которые могут непреднамеренно изменить или удалить большое количество строк. Переменная была добавлена в MySQL 3.22.32.
    • SQL__SELECT_LIMIT = {значение| DEFAULT}. Максимальное количество строк, ко торые может вернуть оператор SELECT. Значение по умолчанию для новых подклю чений - "неограниченное" (unlimited). Если вы изменяете это ограничение, значение по умолчанию может быть восстановлено присвоением SQL_SELECT_LIMIT значения DEFAULT.
    • SQL_WARNINGS = {0 | 1}. Эта переменная устанавливает режим вывода преду преждений однострочными операторами INSERT. По умолчанию имеет значение 0. Установите ее равной 1, чтобы генерировать строки предупреждений. Переменная была добавлена в MySQL 3.22.11.
    • TIMESTAMP = { 3Ha4eHMe_ timestamp | DEFAULT}. Устанавливает текущее время для клиента. Применяется для получения оригинальной временной метки при исполь зовании бинарного журнала для восстановления строк. значение_ЫтезЬатр должно быть временной меткой в формате Unix, а не временной меткой MySQL.
    • UNIQUE_CHECKS = {0 | 1}. Если установлена в 1 (как по умолчанию), выполняется проверка уникальности вторичных индексов в таблицах InnoDB. Если установлена в 0, никаких проверок уникальности не выполняется. Переменная появилась в MySQL 3.23.52.
Синтаксис SHOW CHARACTER SET
SHOW CHARACTER SET [LIKE 'шаблон']
Оператор SHOW CHARACTER SET выводит список всех допустимых символьных набо­ров. Он принимает необязательную конструкцию LIKE для указания шаблона имен набо­ров символов. Например:
mysql> SHOW CHARACTER SET LIKE 4 atin%';


Столбец Maxlen показывает максимальное число байт, необходимых для хранения одного символа. SHOW CHARACTER SET доступен, начиная с версии MySQL 4.I.O.
Синтаксис SHOW COLLATION
SHOW COLLATION [LIKE 'шаблон1]
Вывод SHOW COLLATION включает все допустимые порядки сопоставления наборов символов. Принимает необязательную конструкцию LIKE для указания шаблона наиме­нований порядка сопоставления. Например:
mysql> SHOW СОЫАТЮЫ LIKE 'latinl*1;


Столбец Default показывает, является ли данный порядок сопоставления порядком по умолчанию для данного набора символов. Compiled отражает, является ли данный набор символом заранее скомпилированным на сервере. Sortlen имеет отношение к объему памяти, необходимому для сортировки строк, представленных в данном наборе символов.
SHOW COLLATION доступен, начиная с версии MySQL 4.I.O.
Синтаксис SHOW COLUMNS
SHOW [FULL] COLUMNS FROM имя^таблицы [FROM имя_базы_данных] [LIKE 'шаблон']
SHOW COLUMNS выводит список столбцов заданной таблицы. Если типы столбцов от­личаются от тех, что были заданы оператором CREATE TABLE, имейте в виду, что MySQL иногда изменяет типы столбцов при создании или изменении структуры таблицы. Усло­вия, при которых это происходит, описаны в разделе Неявные изменения спецификаций столбцов.
Ключевое слово FULL может использоваться, начиная с MySQL 3.23.32 и выше. Оно включает в вывод информацию о привилегиях, которые вы имеете для доступа к данным столбцам. Начиная с MySQL 4.1, слово FULL также включает вывод всех комментариев о столбцах.
Вы можете использовать имя_базы_данных.имя_таблицы как альтернативу синтаксису имя_таблицы FROM имя_базы_данных. Следующие два оператора эквивалентны:
mysql> SHOW COLUMNS FROM mytable FROM mydb; mysql> SHOW COLUMNS FROM mydb.mytable;
SHOW FIELDS — это синоним SHOW COLUMNS. Вы также можете вывести список столбцов с помощью команды mysqlshow имя__базы_данных имя_таблицы.
Оператор DESCRIBE выводит информацию, подобную SHOW COLUMNS. См. раздел Синтаксис DESCRIBE (получить информацию о столбцах)
Синтаксис SHOW CREATE DATABASE
SHOW CREATE DATABASE имя_базы_данных
Выводит оператор CREATE DATABASE, который создаст указанную базу данных. Добавлен в MySQL 4.1.
mysql> SHOW CREATE DATABASE testG
*************************** j. row ***************************
Database: test Create Database: CREATE DATABASE 4est4
/*!40100 DEFAULT CHARACTER SET latinl */
Синтаксис SHOW CREATE TABLE
SHOW CREATE TABLE имя таблицы Выводит оператор CREATE TABLE, который создаст указанную таблицу. Добавлен в MySQL 3.23.20.
mysql> SHOW CREATE TABLE tG
*************************** ]_. row ***************************
Table: t Create Table: CREATE TABLE t (
id INT (11) default NULL auto_increment,
s char (60) default NULL,
PRIMARY KEY (id) ) TYPE=MyISAM
SHOW CREATE TABLE заключает в кавычки имена таблицы и столбцов в соответствии со значением опции SQL_QUOTE_SHOW_CREATE.
Синтаксис SHOW DATABASES
SHOW DATABASES [LIKE 'шаблон']
SHOW DATABASES выводит список баз данных на хосте сервера MySQL. Вы также мо­жете получить этот список с помощью команды mysqlshow. Начиная с MySQL 4.0.2, вы увидите только те базы данных, для доступа к которым имеете какие-либо привилегии, если только у вас нет глобальной привилегии SHOW DATABASES.
Если сервер запущен с опцией — skip-show-database, вы не сможете использовать этот оператор вообще, если не имеете привилегии SHOW DATABASES.
Синтаксис SHOW ENGINES
SHOW [STORAGE] ENGINES
SHOW ENGINES выводит информацию о состоянии механизмов хранения. Это особенно удобно для проверки того, какие механизмы хранения поддерживаются сервером, или для того, чтобы увидеть, какой механизм используется по умолчанию. Оператор реали­зован в MySQL 4.1.2. Существует устаревший синоним-SHOW TABLE TYPES.
mysql> SHOW ENGINESG
*************************** 2_, row ***************************
Type: MylSAM Support: DEFAULT
Comment: Default type from 3.23 with great performance
*************************** 2, row ***************************
Type: HEAP Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
*************************** з_ row ***************************
Type: MEMORY Support: YES
Comment: Alias for HEAP
*************************** 4 row ***************************
Type: MERGE Support: YES
Comment: Collection of identical MylSAM tables
*************************** 5 row ***************************
Type: MRG_MYISAM Support: YES Comment: Alias for MERGE
*************************** g row ***************************
Type: ISAM Support: NO
Comment: Obsolete table type; Is replaced by MylSAM
*************************** 7_ row ***************************
Type: MRG_ISAM Support: NO Comment: Obsolete table type; Is replaced by MRG_MYISAM
*************************** g _ row ***************************
Type: InnoDB Support: YES
Comment: Supports transactions, row-level locking and foreign keys
*************************** g row ***************************
Type: INNOBASE Support: YES
Comment: Alias for INNODB
*************************** 20 . row ***************************
Type: BDB Support: YES Comment: Supports transactions and page-level locking
*************************** ]д _ j-ow ***************************
Type: BERKELEYDB Support: YES Comment: Alias for BDB
Значение Support показывает, поддерживается ли данный механизм сервером, и ка­кой из них является механизмом по умолчанию. Например, если сервер запущен с опцией —def ault-table-type=InnoDB, то значением Support для InnoDB будет DEFAULT.
Синтаксис SHOW ERRORS
SHOW ERRORS [LIMIT [смещение,} количество_строк] SHOW COUNT(*) ERRORS
Этот оператор похож на SHOW WARNINGS, с тем отличием, что вместо отображения ошибок, предупреждений и примечаний, он выводит только ошибки. SHOW ERRORS доступен, начиная с версии MySQL 4.I.O.
Конструкция LIMIT имеет тот же синтаксис, что и в операторе SELECT. См. раздел Синтаксис SELECT
Оператор SHOW COUNT (*) ERRORS отображает количество ошибок. Вы также можете получить это количество из переменной error_count:
SHOW COUNT(*) ERRORS; SELECT @@error_count;
Более подробную информацию можно получить в разделе Синтаксис SHOW WARNINGS
Синтаксис SHOW GRANTS
SHOW GRANTS FOR пользователь

Этот оператор выводит операторы GRANT, которые должны быть выполнены для дуб­лирования набора привилегий пользователя MySQL. mysql> SHOW GRANTS FOR 'root'@ 'localhost1;

Начиная с версии MySQL 4.1.2, чтобы получить список привилегий текущего сеанса, можно воспользоваться любым из перечисленных ниже операторов:
SHOW GRANTS;
SHOW GRANTS FOR CURRENTJJSER;
SHOW GRANTS FOR CURRENTJJSER();
До MySQL 4.1.2 узнать, какой пользователь был аутентифицирован в текущем сеан­се, можно было с помощью функцию CURRENT_USER() (новая в MySQL 4.0.6). Затем по­лученное значение нужно было указать в операторе SHOW GRANTS. См. раздел 5.8.3.
SHOW GRANTS доступен, начиная с MySQL 3.23.4.

Синтаксис SHOW INDEX
SHOW INDEX FROM имя_таблицы [FROM имя_базы_данных]
show index возвращает информацию об индексах таблицы в формате, подобном тому, что выдает вызов SQLStatistics в ODBC. SHOW INDEX возвращает следующие поля:

  1. Table. Имя таблицы.
  2. Non_unique. О, если индекс не может иметь дублированных ключей, 1 - если может.
  3. Key_name. Имя индекса.
  4. Seq_in_index. Порядок столбца в ключе индекса, начиная с 1.
  5. Column_name. Имя столбца.
  6. Collation. Как столбец сортируется в индексе. В MySQL может иметь значения 'A' (ascending-по возрастанию) или NULL (не сортировано).
  7. Cardinality. Количество уникальных значений в индексе. Это обновляется опе ратором ANALYZE TABLE или командой myisamchk -a. Cardinality рассчитывается на базе статистики, хранится в виде целого числа, поэтому нет необходимости в большой точности для маленьких таблиц.
  8. Sub_part. Количество проиндексированных символов столбца, если ключ постро ен на части столбца. Если вся столбец является ключом индекса, принимает значение NULL.
  9. Packed. Показывает, упакован ли индекс. Если нет - NULL.
  10. Null. Содержит YES, если столбец допускает значение NULL.
  11. Index type. Использованный метод индексации (BTREE, FULLTEXT, HASH, RTREE).
  12. Comment. Различные замечания. До MySQL 4.0.2, когда был добавлен столбец Index type, Comment показывает, является ли индекс FULLTEXT.

Столбцы Packed и Comment появились в версии MySQL 3.23.0. Столбцы Null и Indextype были добавлены в MySQL 4.O.2.
В качестве альтернативы синтаксиса имя_таблицы FROM имя__базы_данных можно ис­пользовать имя_базы_данных. имя_таблицы. Следующие два оператора эквивалентны:
mysql> SHOW INDEX FROM mytable FROM mydb; mysql> SHOW INDEX FROM mydb. mytable;
SHOW KEYS - синоним для SHOW INDEX. Список индексов можно также получить по команде mysqlshow -k имя_базы_данных имя_таблицы.

Синтаксис SHOW INNODB STATUS
SHOW INNODB STATUS
Этот оператор показывает подробную информацию о состоянии механизма хранения
InnoDB.
Синтаксис SHOW LOGS
SHOW [BDB] LOGS
SHOW LOGS выводит информацию о существующих журнальных файлах. Оператор был реализован в MySQL 3.23.29. В настоящий момент он отображает только информа­цию о журнальных файлах Berkley DB, поэтому псевдонимом для него (доступным с MySQL 4.1.1) является SHOW BDB LOGS.
SHOW LOGS возвращает следующие поля:
File. Полный путь к файлу журнала.

  • Туре. Тип файла журнала (BDB для журналов Berkley DB).
  • Status. Состояние файла журнала (FREE, если файл может быть удален, или IN USE, если файл необходим подсистеме обработки транзакций).
Синтаксис SHOW PRIVILEGES
SHOW PRIVILEGES
SHOW PRIVILEGES выводит список системных привилегий, поддерживаемых сервером MySQL. Этот оператор реализован в MySQL 4.I .O.
mysql> SHOW PRIVILEGESG
*************************** i9 row ***************************
Privilege: Select
Context: Tables
Comment: To retrieve rows from table
***************************
2. row ***************************
Privilege: Insert Context: Tables Comment: To insert data into tables
*************************** з# rOw ***************************
Privilege: Update Context: Tables Comment: To update existing rows
*************************** 4 row ***************************
Privilege: Delete
Context: Tables
Comment: To delete existing rows
*************************** 5_ row ***************************
Privilege: Index Context: Tables
Comment: To create or drop indexes
*************************** g row ***************************
Privilege: Alter Context: Tables
Comment: To alter the table
*************************** 7_ row ***************************
Privilege: Create
Context: Databases,Tables,Indexes
Comment: To create new databases and tables
*************************** g row ***************************
Privilege: Drop Context: Databases,Tables Comment: To drop databases and tables
*************************** g_ row ***************************
Privilege: Grant Context: Databases,Tables
Comment: To give to other users those privileges you possess
*************************** ю _ j-ow ***************************
Privilege: References
Context: Databases,Tables
Comment: To have references on tables
*************************** 21. tow ***************************
Privilege: Reload
Context: Server Admin
Comment: To reload or refresh tables, logs and privileges
*************************** 12. row ***************************
Privilege: Shutdown Context: Server Admin
Comment: To shutdown the server
*************************** ]_3_ row ***************************
Privilege: Process Context: Server Admin
Comment: To view the plain text of currently executing queries
*************************** i4_ row ***************************
Privilege: File
Context: File access on server Comment: To read and write files on the server
Синтаксис SHOW PROCESSLIST
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST выводит список работающих потоков сервера. Эту же информа­цию можно получить командой mysqladmin processlist. Если у вас есть привилегия SUPER, вы можете видеть все потоки, в противном случае - только свои собственные (то есть потоки, ассоциированные с учетной записью пользователя MySQL, под которой вы вошли). См. раздел Синтаксис KILL Если не указано ключевое слово FULL, выводятся только пер­вые 100 символов каждого запроса.
Начиная с MySQL 4.0.12, этот оператор сообщает имена хостов для подключений TCP/IP в формате имя__хоста: порт_клиента, чтобы можно было понять, какой клиент что делает.
Этот оператор очень удобен, если вы получаете сообщение об ошибке наподобие "слишком много подключений" и хотите разобраться в том, что происходит. MySQL резервирует дополнительное подключение для учетной записи с привилегией SUPER, чтобы всегда давать возможность администратору подключиться и проверить систему (предполагается, что вы не даете эту привилегию всем пользователям).
Ниже описаны некоторые состояния, которые обычно можно увидеть в выводе SHOW PROCESSLIST:

  1. Checking table. Поток выполняет (автоматическую) проверку таблицы.
  2. Closing table. Означает, что поток сбрасывает измененные данные таблицы на диск и закрывает используемые таблицы. Это должно быть быстрой операцией. Если же нет, вам стоит проверить, не переполнен ли диск и не слишком ли интен> сивно он используется.
  3. Connect Out. Подчиненный сервер репликации подключается к главному.
  4. Copying to tmp table on disk. Временный результирующий набор оказался боль ше tmp_table_size и поток переносит временную таблицу из памяти на диск для экономии памяти.
  5. Creating tmp file. Поток создает временный файл для сохранения части резуль тата запроса.
  6. Deleting from main table. Поток выполняет первую часть операции многотаб личного удаления, удаляя данные из первой таблицы.
  7. Deleting from reference table. Поток выполняет вторую часть операции много табличного удаления, удаляя соответствующие строки из других таблиц.
  8. Flushing tables. Поток выполняет FLUSH tables и ожидает, когда все потоки закроют свои таблицы.

• Killed. Кто-то послал команду прерывания потока, и он должен быть прерван при следующей проверке флага удаления потока. Этот флаг проверяется на каждом шаге основного цикла MySQL, но иногда это может потребовать некоторого вре­мени на прерывание потока. Если поток блокирован каким-то другим потоком, прерывание произойдет немедленно после освобождения блокировки.

  1. Sending data. Поток обрабатывает строки для оператора SELECT и отправляет их клиенту.
  2. Sorting for group. Поток выполняет сортировку для удовлетворения условию GROUP BY.
  3. Sorting for order. Поток выполняет сортировку для удовлетворения условию ORDER BY.
  4. Opening tables. Поток пытается открыть таблицу. Это должно быть очень быст рой операцией, если только ничто не мешает открытию. Например, операторы

ALTER TABLE или LOCK TABLE могут предотвратить открытие таблиц до своего за­вершения.

  1. Removing duplicates. Запрос использовал SELECT DISTINCT таким образом, что MySQL не может оптимизировать операцию DISTINCT на ранней стадии. Из-за этого MySQL потребовалась дополнительная стадия для удаления всех дублиро ванных строк из результирующего набора перед отправкой его клиенту.
  2. Reopen table. Поток получил блокировку таблицы, но после этого был извещен о том, что структура таблицы изменилась. Он освобождает блокировку, закрывает таблицу, а затем вновь открывает ее.
  3. Repair by sorting. Код восстановления использует сортировку для создания ин дексов.
  4. Repair with keycache. Код восстановления использует создание ключей одного за другим по кэшу ключей. Это происходит намного медленнее, чем Repair by sorting.
  5. Searching rows for update. Поток выполняет первую фазу поиска всех подле жащих обновлению строк. Это должно быть сделано, если UPDATE изменяет значе ния ключа индекса, который используется для поиска изменяемых строк.
  6. Sleeping. Поток ожидает нового оператора от клиента.
  7. System lock. Поток ожидает получения внешней системной блокировки таблицы. Если вы не используете сразу несколько серверов mysqld на одной машине, кото рые осуществляют доступ к одним и тем же таблицам, можете отключить внеш ние блокировки, указав опцию —skip-external-locking.
  8. Upgrading lock. Обработчик отложенных вставок INSERT DELAYED пытается полу­
    чить блокировку таблицы для вставки строк.
  9. Updating. Поток ищет строки для обновления и обновляет их.
  10. User lock. Поток ожидает возврата GET_LOCK ().
  11. Waiting for tables. Поток получил извещение о том, что структура таблицы из менилась и нуждается в повторном открытии таблицы, чтобы получить новую структуру. Однако чтобы быть готовым повторно открыть таблицу, поток вынуж ден ожидать, когда все остальные потоки закроют таблицу.

Такое извещение поступает, когда другой поток использует FLUSH TABLES, либо в обработке находится один из следующих операторов: FLUSH TABLES имя_таблицы, ALTER TABLE,RENAME TABLE, REPAIR TABLE, ANALYZE TABLE ИЛИ OPTIMIZE TABLE.

  • Waiting for handler insert. Обработчик отложенных вставок INSERT DELAYED
    обработал все отложенные вставки и ожидает новых. Большинство состояний соответствуют очень быстрым операциям. Если поток оста­навливается в одном из этих состояний на много секунд, это может говорить о проблеме, которую необходимо исследовать.
Существует ряд других состояний, не перечисленных в предыдущем списке, однако многие их них применяются только при поиске ошибок в коде сервера.
Синтаксис SHOW STATUS
SHOW STATUS [LIKE 'шаблон']

SHOW STATUS выводит информацию о состоянии сервера. Эту же информацию можно получить командой mysqladmin extended-status.
Частичный вывод представлен ниже. На вашем сервере список переменных и их значений может отличаться. Смысл каждой переменной подробно описан в книге MySQL. Руководство администратора (М. : Издательский дом "Вильяме", 2005, ISBN 5-8459-0805-1).
mysql> SHOW STATUS;


С конструкцией like оператор выводит только те переменные, имена которых соответствуют шаблону:
mysql> SHOW STATUS LIKE 'Key%';


Синтаксис SHOW TABLE STATUS
SHOW TABLE STATUS [FROM имябазы данных] [LIKE 'шаблон'}

SHOW TABLE STATUS (новый операторв MySQL 3.23) работает подобно SHOW TABLE, но выводит большой объем информации о каждой таблице. Вы можете получить этот спи­сок также с помощью команды mysqlshow —status имя_базы_данных.
show table status возвращает следующие поля:

  • Name. Имя таблицы.
  • Туре. Тип таблицы.
  • Row_f ormat. Формат хранения строки (Fixed, Dynamic или Compressed).
  • Rows. Количество строк.
  • Avg_row_length. Средняя длина строки.
  • Data_length. Длина файла данных.
  • Max_data_length. Максимальная длина файла данных. Для строк с фиксирован ной длиной — максимальное количество строк в таблице. Для строк с динамиче ским форматом это общее число байт данных, которые можно поместить в табли цу, учитывая размер используемого указателя данных.
  • Index_length. Длина индексного файла.
  • Data_f гее. Количество выделенных, но не используемых байт.
  • Auto_increment. Следующее значение AUTO_INCREMENT.
  • Create_time. Время создания таблицы.
  • Update_time. Время обновления файла данных.
  • Check_time. Когда таблица проверялась в последний раз.
  • Collation. Набор символов и порядок сопоставления таблицы (новое в 4.1.1).
  • Checksum. Актуальная контрольная сумма (если есть) (новое в 4.1.1).
  • Create_options. Дополнительные опции, использованные в CREATE TABLE.
  • Comment. Комментарий, введенный при создании таблицы (или некоторая инфор­
    мация о том, почему MySQL не может получить доступ к данным в таблице).

В комментариях к таблице InnoDB сообщает о свободном месте в табличном про­странстве, которому принадлежит таблица. Для таблиц, расположенных в разделяемом табличном пространстве (shared tablespace), это свободное место в разделяемом таблич­ном пространстве. Если вы используете множественные табличные пространства, и таб­лица имеет свое собственное табличное пространство, отображается свободное про­странство только этой таблицы.
Для таблиц типа MEMORY (HEAP) значение Data_length, Max_data_length и Index_length принимают примерное значение объема выделенной памяти. Алгоритм распределения памяти резервирует память большими кусками, чтобы уменьшить количество необходи­мых операций.

Синтаксис SHOW TABLES
SHOW [OPEN] TABLES [FROM имя_базы_данных] [LIKE 'шаблон']
SHOW TABLES выводит список всех постоянных (не временных) таблиц заданной базы данных. Этот же список можно получить командой mysqlshow имя_базы_данных.

Назаметку!
Если у вас нет привилегий в таблице, эта таблица не будет присутствовать в списке.
SHOW TABLES выводит список таблиц, которые в данный момент открыты в табличном кэше. Поле Comment в списке говорит о том, сколько раз таблица была cached и infuse. Слово OPEN может использоваться, начиная с MySQL 3.23.33 и в последующих версиях.
Синтаксис SHOW VARIABLES
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'шаблон1]
SHOW VARIABLES выводит значения некоторых системных переменных MySQL. Эта информация также может быть получена командой mysqladmin variables.
Опции GLOBAL и SESSION появились в MySQL 4.O.3. Указав GLOBAL, вы получите зна­чения, которые будут использоваться новыми подключениями к MySQL. Задав SESSION, вы получите значения, действующие в текущем сеансе. Если не указывать ни одну из этих опций, по умолчанию принимается SESSION. LOCAL - это синоним для SESSION.
Если значения по умолчанию вам не подходят, можете установить значения боль­шинства из этих переменных, используя опции командной строки при запуске mysqld, или же во время выполнения с помощью оператора SET. См. раздел Синтаксис SET
Частичный вывод представлен ниже. Список переменных и их значения могут отли­чаться на вашем сервере. Описание каждой переменной можно найти в книге MySQLРу­ководство администратора (М.: Издательский дом "Вильяме", 2005, ISBN 5-8459-0805-1).
mysql> SHOW VARIABLES;


С конструкцией LIKE оператор выводит только те переменные, имена которых соот­ветствуют шаблону:

mysql> SHOWVARIABLESLIKE 'have%!;


СинтаксисSHOW WARNINGS
SHOW WARNINGS [LIMIT [смещение,] количество_строк] SHOW COUNT(*) WARNINGS
SHOW WARNINGS выводит ошибки, предупреждения и другие замечания, которые появ­ляются в результате выполнения последнего оператора, который генерирует сообщения, или же ничего, если последний оператор, использующий таблицу, не сгенерировал ни­каких сообщений. Этот оператор реализован в MySQL 4.I.O. Родственный оператор -SHOW ERRORS - показывает только ошибки. См. раздел Синтаксис SHOW ERRORS
Список сообщений очищается для каждого нового оператора, использованного в таб­лице.
Оператор SHOW COUNT (*) WARNINGS отображает общее количество ошибок, предупре­ждений и замечаний. Вы можете прочитать это значение в переменной warning_count:
SHOW COUNT(*) WARNINGS; SELECT @@warning_count;
Значение warningcount может больше, чем количество сообщений, отображенное SHOW WARNINGS, если значение системной переменной max_error_count установлено дос­таточно малым, то есть так, что не все сообщения сохраняются. Приведенный ниже пример показывает, как это может случиться.
Конструкция limit имеет тот же синтаксис, что и в операторе SELECT. См. раздел 6.1.7.
Сервер MySQL отправляет обратно общее количество ошибок, предупреждений и замечаний, полученных в результате последнего оператора. Если вы используете программный интерфейс С API, это значение может быть получено вызовом mysql_warning_count 0 .
Отметим, что подсистема предупреждений появилась в MySQL 4.1.0, когда многие операторы еще не генерировали предупреждений. В версии MySQL 4.1.1 ситуация с предупреждениями, генерируемыми такими операторами, как LOAD data infile, а также операторами DML (языка манипуляции данными), подобными INSERT, UPDATE, CREATE TABLE И ALTER TABLE (в других источниках принято считать, что CREATE TABLE и ALTER TABLE - это операторы DDL (Data Definition Language - язык определения данных), а не DML - прим. пер), значительно улучшилась.
Следующий оператор DROP TABLE генерирует сообщение:
mysql> DROP TABLE IF EXISTS no_such_table; mysql> SHOW WARNINGS;


Ниже представлен простой пример, показывающий синтаксис предупреждений CREATE TABLE и замену предупреждения после оператора INSERT:
mysql> CREATE TABLE tl (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM; Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
*************************** 2. row ***************************
Level: Warning
Code: 1287 Message: 'TYPE=storage_engine' is deprecated, use
'ENGINE=storage_engine' instead 1 row in set (0.00 sec)
mysql> INSERT INTO tl VALUES(10, 'mysql'),(NULL,'test1),
-> (300,'open source');
Query OK, 3 rows affected, 4 warnings (0.01 sec) Records: 3 Duplicates: 0 Warnings: 4
mysql> SHOW WARNINGS\G
*************************** ]_. row ***************************
Level: Warning Code: 1265
Message: Data truncated for column 'b' at row 1
*************************** 2. row ***************************
Level: Warning
Code: 1263
Message: Data truncated, NULL supplied to NOT NULL column 'a' at row 2
*************************** з#. row ***************************
Level: Warning Code: 1264
Message: Data truncated, out of range for column 'a1 at row 3
*************************** 4# row ***************************
Level: Warning Code: 1265
Message: Data truncated for column 'b1 at row 3 Arows in set (0.00 sec)
Максимальное количество ошибок, сообщений и замечаний, которые сохраняют­ся между вызовами операторов, определены значением системной переменной max_error_count. По умолчанию оно равно 64. Чтобы изменить количество сообщений, которые нужно сохранять, просто измените значение этой переменной. В следующем примере оператор ALTER table генерирует три предупреждающих сообщения, но сохраняется только одно, потому что max_error_count присвоено значение 1:
mysql> SHOW VARIABLES LIKE 'max_error_count';

mysql> SET max__error_count=l; Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE tl MODIFY b CHAR;
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 3
mysql> SELECT @@warning_count;

Чтобы отключить сообщения вообще, присвойте переменной maxerrorcount зна­чение 0. В этом случае warning_count попрежнему показывает, сколько предупрежде­ний было сгенерировано, но ни одно из них не сохраняется.