Поиск
Информационные функции
- BENCHMARK(количество, выражение)
- CURRENT__USER()
- Ключевое слово SQL_CALC_found_rows должно указываться в первом операторе
- Значение FOUND_ROWS() будет точным только при условии применения UNION ALL. Если указано UNION без ALL, происходит исключение дубликатов, и значение FOUND_ROWS () будет лишь приблизительным.
- Если в UNION не присутствует LIMIT, то SQL_CALC_FOUND_ROWS игнорируется и возвращается количество строк во временной таблице, которая создается для выполнения UNION.
- Использовать таблицу для генерации последовательности чисел:
- VERSION(). Возвращает строку, содержащую информацию о версии сервера
MySQL:
mysql> SELECT VERSION(); -> '4.1.2-alpha-log'
Следует отметить, что если строка версии заканчивается на '-log', это означает, что регистрация в журнале включена.

Время, которое сообщает 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.
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 и 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() вернет при следующем вызове. Это можно использовать для эмуляции последовательностей: • Создать таблицу для хранения счетчика последовательности и инициализировать его:
Оператор 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'