Поиск

Информационные функции

  • BENCHMARK(количество, выражение)
  • Функция BENCHMARK () выполняет выражение выражение в точности количество раз. Она может использоваться для определения того, насколько быстро MySQL выпол­няет выражение. Возвращаемый результат всегда равен 0. Предполагаемое приме­нение - в среде клиента mysql, который сообщает время выполнения запроса: mysql> SELECT BENCHMARK(1000000,ENCODE('hello','goodbye1));

    Время, которое сообщает mysql - это время обслуживания клиента, а не потра­ченное центральным процессором время на стороне сервера. Рекомендуется вы­полнить BENCHMARK () несколько раз, и интерпретировать результат в зависимости от степени загруженности сервера.
    CHARSET{строка)
    Возвращает набор символов аргумента строка.
    mysql> SELECT CHARSET('abc');
    -> 'latinl1 mysql> SELECT CHARSET(CONVERT('abc' USING utf8));
    -> 'utf8' mysql> SELECT CHARSET(USER());
    -> futf8'
    Функция CHARSET ( ) была добавлена в MySQL 4.1.0.
    COERCIBILITY(строка)
    Возвращает значение принуждения сопоставления для аргумента строка.
    mysql> SELECT COERCIBILITY('abc ' COLLATE latinl_swedishj:i);
    -> 0 mysql> SELECT COERCIBILITY('abc');
    -> 3 mysql> SELECT COERCIBILITY(USER()) ;
    -> 2
    Возвращаемые значения имеют следующий смысл:

    Меньшие значения обладают большим приоритетом. Функция COERCIBILITY () появилась в версии MySQL 4.I.O.
    COLLATION{строка)
    Возвращает наименование порядка сопоставления символьного набора для задан­ного аргумента строка.
    mysql> SELECT COLLATION('abc');
    -> flatinl_swedish_ci' mysql> SELECT COLLATION(jitf8'abc');
    -> ' utf8_general_ci'
    Функция COLLATION () была добавлена в MySQL 4.1.0.
    CONNECTION_ID()
    Возвращает идентификатор соединения (идентификатор потока) текущего сеанса. Каждое клиентское соединение получает свой собственный уникальный иденти­фикатор.
    mysql> SELECT CONNECTION_ ID(); -> 23786
    Функция CONNECTION_ID() была введена в MySQL 3.23.14.

  • CURRENT__USER()
  • Возвращает комбинацию имени пользователя и имени хоста после аутентифика­ции в текущем сеансе. Это значение соответствует пользовательской учетной за­писи MySQL, которая определяет ваши права доступа. Оно может отличаться от значения, возвращаемого функцией USER ().
    mysql> SELECT USER();
    -> 'davida@localhost' mysql> SELECT * FROM mysql.user; ERROR 1044: Access denied for user: '@localhostf to database 'raysql' mysql> SELECT CURRENTJJSER();
    -> '@localhost'
    Приведенный выше пример иллюстрирует, что, несмотря на то, что клиент имеет имя davida (как показывает функция USERO), сервер аутентифицировал клиента, использующего анонимный доступ (что видно по пустой части имени пользовате­ля в значении CURRENT_USER()). Единственной причиной, почему такое может случиться, является отсутствие учетной записи для davida в таблице привилегий. Функция CURRENTJJSER () была добавлена в MySQL 4.O.6. Ш DATABASE ()
    Возвращает имя базы данных по умолчанию (текущей базы данных).
    mysql> SELECT DATABASE (); -> 'test'
    Если текущей базы данных нет, DATABASE () возвращает NULL, начиная с версии MySQL 4.1.1, либо пустую строку в более ранних версиях.
    FOUND_ROWS()
    Оператор SELECT может включать конструкцию limit для ограничения количества строк, которые сервер возвращает клиенту. В некоторых случаях желательно знать, сколько строк сервер вернул бы без конструкции LIMIT, но без повторного выпол­нения запроса. Чтобы получить значение счетчика строк, включите опцию SQL_CALC_FOUND_ROWS в состав оператора SELECT, после чего вызовите FOUND_ROWS ():
    mysql> SELECT SQL _CALC_FOUND__ROWS * FROM tbl_name
    -> WHERE id >100 LIMIT 10; mysql> SELECT FOUND_ROWS ();
    Второй оператор SELECT вернет число, показывающее, сколько строк первый опе­ратор SELECT вернул бы, будь он без конструкции LIMIT. (Если предшествующий оператор select не содержит опции sql__calc_found_rows, то found_rows () может вернуть другое значение.)
    Следует отметить, что когда используется SELECT sql_CALC_found_rows, то MySQL приходится посчитать, сколько строк будет в полном результирующем наборе. Од­нако это делается быстрее, чем если запустить запрос снова без конструкции LIMIT, поскольку результирующий набор не приходится отсылать клиенту. SQL_CALC_FOUND_ROWS и FOUND_ROWS () могут оказаться удобными в ситуациях, ко­гда нужно ограничить число строк, возвращаемых запросом, но при этом опреде­лить количество строк в полном результирующем наборе, не запуская запрос сно­ва. Примером может служить Web-сценарий, который представляет постраничный список ссылок на страницы, содержащие другие разделы результата поиска. Функция FOUNDROWS () позволяет определить, сколько других страниц необходи­мо для отображения оставшейся части результата.
    Применение SQL_CALC_FOUND_ROWS и FOUND_ROWS() более сложно для запросов с UNION, чем для простых операторов SELECT, потому что LIMIT может встретиться в UNION во многих местах. Они могут касаться отдельных операторов SELECT в со­ставе UNION либо общего результата UNION в целом.
    Цель SQL_CALC_FOUND_ROWS для UNION состоит в том, что он должен вернуть коли­чество строк, которые будут возвращены без глобального LIMIT. Условия приме­нения SQL_CALC_FOUND_ROWS с UNION перечислены ниже:
  • Ключевое слово SQL_CALC_found_rows должно указываться в первом операторе
  • SELECT.

    1. Значение FOUND_ROWS() будет точным только при условии применения UNION ALL. Если указано UNION без ALL, происходит исключение дубликатов, и значение FOUND_ROWS () будет лишь приблизительным.
    2. Если в UNION не присутствует LIMIT, то SQL_CALC_FOUND_ROWS игнорируется и возвращается количество строк во временной таблице, которая создается для выполнения UNION.

    SQL_calc_FOUND_ROWS и FOUND_ROWS () доступны, начиная с MySQL 4.0.0. LAST_INSERT_ID() LAST_INSERT
    Возвращает последнее автоматически сгенерированное значение, которое было вставлено в столбец AUTO_INCREMENT.
    mysql> SELECT LAST_INSERT_ ID(); -> 195
    Последний идентификатор, который был сгенерирован, поддерживается на серве­ре на основе соединений. Это означает, что значение, возвращаемое клиенту, со­ответствует последнему сгенерированному значению AUTO_INCREMENT в сеансе данного клиента. Оно никак не может быть затронуто другими клиентами, равно как не требует блокировок или транзакций.
    Значение, возвращаемое LAST_INSERT_ID() не изменяется, если вы обновляете столбец AUTO_INCREMENT в строке не с помощью "магических" значений (то есть, не NULL и не 0).
    Если вы вставляете много строк одним оператором, LAST_INSERT_ID() возвращает значение для первой вставленной строки. Цель этого состоит в том, чтобы облег­чить воспроизведение того же оператора INSERT на другом сервере.
    Если указан аргумент выражение, значение аргумента возвращается функцией и запоминается как следующее значение, которое LAST_INSERT_ID() вернет при следующем вызове. Это можно использовать для эмуляции последовательностей: • Создать таблицу для хранения счетчика последовательности и инициализиро­вать его:

  • Использовать таблицу для генерации последовательности чисел:
  • mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+l); mysql> SELECT LASTJENSERTJED ();
    Оператор UPDATE увеличивает счетчик последовательности и заставляет
    следующий вызов LAST_INSERT_ID() возвращать измененное значение.
    Функция С API по имени mysql_insert__id () также может быть использована
    для получения этого значения.
    Вы можете генерировать последовательности без вызова LAST_INSERT_ID(), но польза от ее применения заключается в том, что значение идентификатора под­держивается сервером как последнее автоматически сгенерированное значение. Это обеспечивает безопасное использование в многопользовательской среде, поскольку множество клиентов могут отправлять операторы UPDATE и получать свои собственные значения последовательности через оператор SELECT (или mysql_insert_id()), никак не влияя и не подвергаясь влиянию других клиентов, для которых генерируются их собственные значения последовательности.
    SESSION_USER()
    SESSIONJJSER() - это синоним для USER() .
    SYSTEM_USER()
    SYSTEM_USER() -ЭТО СИНОНИМ ДЛЯ USER0-
    USER(). Возвращает имя текущего пользователя MySQL и имя хоста, с которого
    он подключился.
    mysql> SELECT USER(); -> 'davida@localhost'
    Значение представляет имя пользователя, которое было указано во время под­ключения к серверу, и имя компьютера-хоста, с которого произошло подключе­ние. Возвращаемое значение может отличаться от того, которое выдает CURRENTJJSER().
    До версии MySQL 3.22.11 значение, возвращаемое функцией, не включало в себя имени хоста. Вы можете извлечь имя пользователя, независимо от того, включает ли значение имя хоста или нет, следующим образом:
    mysql> SELECT SUBSTRING_INDEX(USER(),•в',1); -> 'davida'
    Начиная с MySQL 4.1, USER() возвращает значение в наборе символов utf8, по­этому вы также должны убедиться, что строковый литерал ' @' интерпретируется в рамках этого набора символов:
    mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1); -> 'davida'
  • VERSION(). Возвращает строку, содержащую информацию о версии сервера
    MySQL:
    mysql> SELECT VERSION(); -> '4.1.2-alpha-log'
    Следует отметить, что если строка версии заканчивается на '-log', это означает, что регистрация в журнале включена.