|
|
Описані в цьому розділі функції не можна віднести ні до однієї з вище перелічених категорій.
BENCHMARK
BIT_COUNT
BIT_LENGTH
CONNECTION_ID
DATABASE
FOUND_ROWS
GET_LOCK
INET_ATON
INET_NTOA
IS_FREE_LOCK
LAST_INSERT_ID
LOAD_FILE
MASTER_POS_WAIT
RELEASE_LOCK
SESSION_USER
SYSTEMUSER
USER
VERSION
BENCHMARK
BENCHMARK(n,expr)
Розраховує вираз expr число разів, визначене аргументом n. Особливість функції BENCHMARK() полягає в тому, що вона призначена для використання в клієнтських програмах mysql. Вона завжди повертає значення 0,яке ніякого інтересу не представляє. Основний інтерес представляє час, що виводиться програмою mysql після відображення результатів запиту.
mysql>SELECT BENCHMARK(100000,PASSWORD('secret'));
--------------------------------
BENCHMARK(100000,PASSWORD('secret'))
--------------------------------
0
--------------------------------
1 row in set (2.3S sec)
Цей час є тільки приблизним індикатором швидкості обчислень, оскільки відображає час обробки для клієнта, а не окремий час обробки запиту процесором сервера. На це значення часу можуть впливати такі чинники: швидкість завантаження на сервері, чи знаходиться сервер в активному стані або завантажений у момент отримання запиту і т.д. Цю функцію бажано запускати кілька разів, щоб оцінити постійність повертаємого значення.
Функція BENCHMARK() вперше з'явилася в MySQL 3.22.15.
BIT_COUNT
BIT_COUNT(n)
Повертає число визначених аргументом розрядів, яке обробляється як значення типу BIGINT (64-розрядне ціле значення).
BIT_COONT(0) => 00
BIT_COUNT(1) => 1
BIT_COUNT(2) => 1
BIT_COUNT(7) => 3
BIT_COUNT(-1) => 64
BIT_COUNT(NULL) => NULL
BIT_LENGTH
BIT_LENGTH(str)
Ця функція повертає довжину рядка str в бітах або порожнє значення, якщо аргумент рівний "NULL".
BIT_LENGTH ('abc') => 24
BIT_LENGTH('а long string') => 104
Ця функція BIT_LENGTH() була додана в MYSQL 4.0.2 для забезпечення ODBC-сумісності.
CONNECTION_ID
CONNECTION_ID()
Повертає ідентифікатор з'єднання поточного з'єднання. Це ідентифікатор процесу, який сервер асоціює із з'єднанням клієнта.
CONNECTION_ID() => 10146
Функція CONNECTION_ID() вперше з'явилася в MYSQL 3.23.14.
DATABASE
DATABASE()
Повертає рядок з ім'ям поточної бази даних або порожній рядок, якщо поточна база даних не задана.
DATABASE() =>'sampdb'
FOUND_ROWS
FOUND_ROWS()
Повертає кількість рядків, які повинен повернути попередній оператор SELECT без виразу LIMIT. Наприклад, наступний оператор повертає максимум 10 рядків.
mysql> SELECT * FROM mytbl LIMIT 10;
Для того, щоб дізнатися, скільки рядків повинен повернути оператор, якщо не задавати пропозицію LIMIT, досить зробити наступне:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM mytbl LIMIT 10;
mysql> SELECT FOUND_ROWS();
Функція FOUND_ROWS() була вперше додана в MYSQL 4.0.0.
GET_LOCK
GET_LOCK(str, timeout)
Функція GET_LOCK() використовується разом з функціями RELEASE_LOCK() і IS_FREE_LOCK() для встановленя і зняття блокування. Ці дві функції можна застосовувати при створенні додатків,що взаємодіють один з одним по імені блокування.
Функція GET_LOCK() викликається разом з ім'ям блокування, вказаним в рядку str, і значенням періоду, аргументом timeout, що задається, в секундах. Ця функція повертає значення 1, якщо блокування встановлене на протязі заданого періоду, або значення 0, якщо блокування встановлено не було. Виникнення помилки в процесі роботи функції призводить до повернення значення NULL. Значення timeout визначає, скільки часу необхідно чекати до спроби установки блокування (але не період часу, після досягнення якого блокування знімається). Після встановлення блокування залишається постійно активізоване до моменту розблокування користувачем. Наприклад,наступна функція встановлює блокування з ім'ям 'Nellie', чекаючи 10 секунд:
GET_LOCK('Nellie',10)
Блокування може застосовуватись тільки до рядка. Неможливо заблокувати базу даних, таблицю, який-небудь рядок або стовпець в межах таблиці. Іншими словами, блокування не заборонить іншому клієнту вносити зміни в таблиці бази даних. Саме тому блокування за допомогою функції GET_LOCK() є тільки поверхневим — інші клієнти можуть легко визначити, чи було встановлено яким-небудь користувачем блокування. Клієнт, що встановив блокування на ім'я, не дозволяє іншим клієнтам заблокувати це ж ім'я (або подібні спроби інших потоків багатопотокового клієнта, який підтримує декілька з'єднань з сервером.) Припустимо, наприклад, що клієнт 1 блокує рядок "Nellie". Якщо клієнт 2 намагається блокувати цей самий рядок, вона виявиться недоступною до тих пір, поки клієнт 1 не зніме блокування або поки не закінчиться час заданого ним періоду. У першому випадку клієнт 2 згодом зможе успішно встановити блокування, а в останньому випадку його спіткає невдача. Оскільки два клієнти не можуть блокувати даний рядок одночасно, додатки, що звертаються до даних по іменах, можуть використовувати стан блокування цього імені як індикатор доступності або недоступності рядка. Наприклад, можна створити ім'я блокування, засноване на значенні унікального ключа для рядка в таблиці, що дозволить виконувати сумісне його блокування. Блокування знімається тільки викликом функції RELEASE_LOCK() з вказівкою імені блокування:
RELEASE_LOCK('Nellie')
Функція RELEASE_LOCK() повертає значення 1, якщо блокування зняте успішно, або значення 0, якщо блокування встановлене іншим з'єднанням (знімаються тільки власні блокування). Якщо блокування із заданим ім'ям не існує, функція повертає значення NULL.
Розрив клієнтського з'єднання або повторний виклик функції GETLOCK() призводить до автоматичного зняття блокування (один клієнт в змозі заблокувати тільки один рядок в певний момент часу). В останньому випадку старе блокування знімається до встановлення нового, навіть якщо ім'я нового блокування подібно до імені старого.Блокування також знімається при розриві з'єднання клієнта і сервера. Відмітимо, що якщо цей клієнт з дуже тривалим з'єднанням розриває з'єднання по тайм-ауту із-за тривалого періоду неактивності, будь-яке блокування, установленая даним клієнтом, буде знято.
Функцію GETLOCK(str, 0) можна також використовувати для визначення, чи встановлена у нинішній момент часу блокування на рядок str. (Якщо цей рядок не заблокований, то виклик даної функції приведе до установки блокування. У такому випадку слід обов'язково викликати функцію RELEASE_LOCK().)
Для перевірки стану блокування імені можна викликати функцію IS_FREE_LOCK(str), що повертає 1, якщо ім'я доступне (не використовується в блокуваннях); 0, якщо ім'я заблоковане, або NULL, якщо виникла помилка. Всі три функції повертають значення NULL, якщо аргумент імені блокування рівний "NULL".
INET_ATON
INET_ATON(str)
Для заданої IP-адреси, представленої в традиційному вигляді рядка з розділеними крапками тетрадами, повертає цілочисельне представлення адреси або значення "NULL", якщо аргумент не є допустимою IP-адресою.
INET_ATON ('64.28.67.70') => 1075594054
INET_ATON ('25S.255.2SS.2SS') => 4294967295
INET_ATON ('256.255.255.255') => NULL
INET_ATON ('www.mysql.com') => NULL
Функція INET_ATON() з'явилася в MYSQL 3.23.15.
INET_NTOA
INET_NTOA(n)
Для заданого цілочисельного представлення IP-адреси, представленої у вигляді рядка з розділеними крапками тетрадами, повертає відповідне представлення IP-адреси у вигляді рядка з розділеними крапками тетрадами або значення "NULL", якщо аргумент не є допустимою IP-адресою.
INET_NTOA (1075594054) => '64.28.67.70'
INET_NTOA (2130706433) => '127.0.0.1'
Функція INET_NTOA() з'явилася в MYSQL 3.23.15.
IS_FREE_LOCK
IS_FREE_LOCK(str)
Перевіряє стан блокування, заданим рядком str.Функція IS_FREE_LOCK() використовується спільно з функцією GET_LOCK(). Докладніше про блокування можна дізнатися в описі функції GET_LOCK().
Функція IS_FREE_LOCK() з'явилася в MYSQL 4.O.2.
LAST_INSERT_ID
LAST_INSERT_ID()
LAST_INSERT_ID(expr)
Перша форма цієї функції (без аргументу) повертає значення AUTO_INCREMENT, яке було згенеровано останнім під час поточного сеансу роботи сервера, або значення 0, якщо таке значення згенеровано не було.
Друга форма цієї функції LAST_INSERT_ID() призначена для використання в операторі UPDATE. Результат її обробляється таким же чином, як і автоматично створене значення.
Детальніше про цю функцію розповідається в розділі 2, "Робота з даними в MYSQL". Результуюче значення обох форм функції LAST_INSERT_ID() зберігається сервером для кожного з'єднання окремо і не може бути змінено іншими клієнтами, навіть задаючими автоматичне створення нових значень.
Форма функції LAST_INSERT_ID() з аргументом вперше з'явилася в MYSQL 3.22.9.
LOAD_FILE
LOAD_FILE(file_name)
Зчитує файл file_name і повертає його склад у вигляді рядка.Файл повинен розташовуватися на сервері і визначається за допомогою абсолютного (повного) імені шляху.Крім того,цей файл повинен бути відкритим для загального доступу,оскільки спроба прочитання захищеного файлу обов'язково завершиться невдачею.Розміщення файлу на сервері вимушує використовуючого функцію користувача мати привілей FILE. Якщо хоч би одна з цих умов не виконується, функція LOAD_FILE() повертає значення NULL.
Функція LOAD_FILE() вперше з'явилася в MYSQL 3.23.0.
MASTER_POS_WAIT
MASTER_POS_WAIT(log_file,pos)
Ця функція використовується для тестування головного сервера реплікації.Він блокує головний сервер до тих пір, поки сервер не досягне заданого місця в реєстраційному файлі.Якщо підлеглий сервер вже досяг цієї позиції, функція повертає значення, якщо підлеглий сервер не працює, головний блокується до тих пір, поки підлеглий не буде запущений і не досягне заданого положення. Функція MASTER_POS_WAIT() повертає кількість подій реєстраційного файлу, які він повинен чекати до тих пір, поки підлеглий не досягне вказаного положення, або "NULL", якщо виникає помилка або інформація головного сервера не ініціалізувалася.
Функція MASTER_POS_WAIT() була додана в MYSQL 3.23.32.
RELEASE_LOCK
RELEASE_LOCK(str)
Функція RELEASE_LOCK() використовується разом з функцією GET_LOCK().Детальніше про неї розпові дається в описі функції GET_LOCK().
Функція RELEASE_LOCK() вперше з'явилася в MYSQL 3.21.7.
SESSION_USER
SESSION_USER()
Ця функція є аналогом функції USER().
SYSTEMUSER
SYSTEMUSER()
Ця функція є аналогом функції USER().
USER
USER()
Повертає рядок, що представляє поточне для користувача ім'я клієнта.В MYSQL 3.22.1 і в пізніших версіях цей рядок має форму "user@host", де user— ім'я користувача, а host — ім'я комп'ютера, з якого клієнт підключається до сервера.
USER() =>'sampadm@localhost'
SUBSTRING_INDEX (USER(), '@', 1) =>'sampadm'
SUBSTRING_INDEX (USER(), '@', -1) =>'localhost'
До MYSQL 3.22.1 значення, що повертається з USER(), складається тільки з імені користувача.
VERSION
VERSION()
Повертає рядок, що описує версію сервера.
VERSION() =>'4.0.3-beta-log'
Значення складається з номера версії сервера з суфіксами, які можуть включати одне з наступних значень.
-alpha, -beta або - gamma. Відображають стабільність версії MYSQL.
-debug. Означає, що сервер працює в налагоджувальному режимі.
-demo. Відображає той факт, що сервер працює в демонстраційному режимі (використовувався включно до MYSQL 3.23.30).
-embedded. Позначає вбудований сервер, libmysqld.
-log. Позначає включення процесу протоколювання.
-max. Означає, що сервер був відтрансльований з додатковими можливостями.
-nt. Сервер побудований для роботи під управлінням ОС Windows,що використовують NT-технології.
|
|
Книга Фріланс на західному ринку
|
|