Spec-Zone .ru
спецификации, руководства, описания, API
|
Таблица 12.20. Разные Функции
Имя | Описание |
---|---|
DEFAULT()
|
Возвратите значение по умолчанию для столбца таблицы |
GET_LOCK()
|
Получите именованную блокировку |
INET_ATON()
|
Возвратите числовое значение IP-адреса |
INET_NTOA()
|
Возвратите IP-адрес из числового значения |
INET6_ATON()
|
Возвратите числовое значение адреса IPv6 |
INET6_NTOA()
|
Возвратите адрес IPv6 из числового значения |
IS_FREE_LOCK()
|
Проверки, свободна ли именованная блокировка |
IS_IPV4_COMPAT()
|
Возвратите true, если параметром является совместимый с IPv4 адрес |
IS_IPV4_MAPPED()
|
Возвратите true, если параметром является отображенный на IPv4 адрес |
IS_IPV4()
|
Возвратите true, если параметром является адрес IPv4 |
IS_IPV6()
|
Возвратите true, если параметром является адрес IPv6 |
IS_USED_LOCK()
|
Проверки, используется ли именованная блокировка. Возвратите идентификатор соединения если истина. |
MASTER_POS_WAIT() |
Блок до ведомого устройства считал и применил все обновления до указанной позиции |
NAME_CONST()
|
Заставляет столбец иметь имя |
RAND() |
Возвратите случайное значение с плавающей точкой |
RELEASE_LOCK()
|
Выпускает именованную блокировку |
SLEEP() |
Сон в течение многих секунд |
UUID_SHORT()
|
Возвратите оцененный целому числу универсальный идентификатор |
UUID() |
Возвратите Универсальный Уникальный идентификатор (UUID) |
VALUES() |
Определяет значения, которые будут использоваться во время ВСТАВКИ |
Возвращает значение по умолчанию для столбца таблицы. Ошибка заканчивается, если у столбца нет никакого значения по умолчанию.
mysql> UPDATE t SET i = DEFAULT(i)+1
WHERE id < 100;
Форматирует число X
к формату как '#,###,###.##'
,
округленный к D
десятичные разряды, и возвраты результат
как строка. Для получения дополнительной информации см. Раздел
12.5, "Строковые функции".
Попытки получить блокировку с именем, данным строкой str
,
использование тайм-аута timeout
секунды. Возвраты 1
если блокировка была получена успешно, 0
если попытка, синхронизированная (например, потому что другой
клиент ранее заблокировал имя), или NULL
если ошибка произошла (такие
как исчерпывание памяти, или поток был уничтожен с mysqladmin, уничтожают). Если Вам получили
блокировку с GET_LOCK()
,
это выпускается, когда Вы выполняетесь RELEASE_LOCK()
, выполните новое GET_LOCK()
, или Ваше соединение завершается (или обычно или
неправильно). Блокировки, полученные с GET_LOCK()
не взаимодействуйте с транзакциями. Таким образом,
фиксация транзакции не выпускает никакие подобные блокировки, полученные во время транзакции.
Эта функция может использоваться, чтобы реализовать блокировки приложения или моделировать
блокировки записи. Имена блокируются на основе всего сервера. Если имя было заблокировано одним
клиентом, GET_LOCK()
блоки любой запрос другим клиентом для блокировки с
тем же самым именем. Это включает клиентам, которые договариваются о данном имени блокировки, чтобы
использовать имя, чтобы выполнить совместную консультативную блокировку. Но знайте, что это также
включаете клиенту, который не является среди группы сотрудничающих клиентов, чтобы заблокировать
имя, или непреднамеренно или сознательно, и таким образом препятствовать тому, чтобы любой из
сотрудничающих клиентов блокировал то имя. Один способ уменьшить вероятность этого состоит в том,
чтобы использовать имена блокировки, которые специфичны для базы данных или специализированы.
Например, используйте имена блокировки формы db_name.str
или app_name.str
.
mysql>SELECT GET_LOCK('lock1',10);
-> 1mysql>SELECT IS_FREE_LOCK('lock2');
-> 1mysql>SELECT GET_LOCK('lock2',10);
-> 1mysql>SELECT RELEASE_LOCK('lock2');
-> 1mysql>SELECT RELEASE_LOCK('lock1');
-> NULL
Второе RELEASE_LOCK()
вызовите возвраты NULL
потому что блокировка 'lock1'
был автоматически выпущен вторым GET_LOCK()
вызвать.
Если многократные клиенты ожидают блокировки, порядок, в котором они получат ее, неопределен и зависит от факторов, таких как библиотека потока в использовании. В частности приложения не должны предположить, что клиенты получат блокировку в том же самом порядке, что они выпустили запросы блокировки.
Эта функция опасна для основанной на операторе репликации. В MySQL 5.6 регистрируется
предупреждение, если Вы используете эту функцию когда binlog_format
устанавливается в STATEMENT
. (Ошибка #47995)
Учитывая представление точечной четверки адреса сети IPv4 как строка, возвращает целое число,
которое представляет числовое значение адреса в сетевом порядке байтов (обратный порядок байтов). INET_ATON()
возвраты NULL
если это
не понимает свой параметр.
mysql> SELECT
INET_ATON('10.0.5.9');
-> 167773449
Для этого примера возвращаемое значение вычисляется как 10×2563 + 0×2562 + 5×256 + 9.
INET_ATON()
май или, возможно, не возвращается не -NULL
результат для кратких
IP-адресов (такой как '127.1'
как представление '127.0.0.1'
).
Из-за этого, INET_ATON()
должный
не использоваться для таких адресов.
Сохранить значения, сгенерированные INET_ATON()
, используйте INT
UNSIGNED
столбец, а не INT
, который подписывается. Если Вы используете подписанный
столбец, значения, соответствующие IP-адресам, для которых первый октет больше чем 127, не может
быть сохранен правильно. См. Раздел
11.2.6, "Из диапазона и Обработка Переполнения".
Учитывая числовой адрес сети IPv4 в сетевом порядке байтов, возвращает строковое представление
точечной четверки адреса как недвоичная строка в наборе символов соединения. INET_NTOA()
возвраты NULL
если это
не понимает свой параметр.
mysql> SELECT
INET_NTOA(167773449);
-> '10.0.5.9'
Учитывая IPv6 или адрес сети IPv4 как строка, возвращает двоичную строку, которая представляет
числовое значение адреса в сетевом порядке байтов (обратный порядок байтов). Поскольку адреса IPv6
числового формата требуют большего количества байтов чем самый большой целочисленный тип,
представление, возвращенное этой функцией, имеет VARBINARY
тип данных: VARBINARY(16)
поскольку IPv6 адресуется и VARBINARY(4)
для адресов IPv4. Если параметром не является
допустимый адрес, INET6_ATON()
возвраты NULL
.
Следующее использование в качестве примера HEX()
вывести на экран INET6_ATON()
результат в печатаемой форме:
mysql>SELECT HEX(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
-> 'FDFE0000000000005A55CAFFFEFA9089'mysql>SELECT HEX(INET6_ATON('10.0.5.9'));
-> '0A000509'
INET6_ATON()
наблюдает несколько ограничений на допустимые параметры.
Они даются в следующем списке наряду с примерами.
Запаздывающий зональный ID не разрешается, как в fe80::3%1
или fe80::3%eth0
.
Запаздывающая сетевая маска не разрешается, как в 2001:45f:3:ba::/64
или 192.168.1.0/24
.
Для значений, представляющих адреса IPv4, только поддерживаются
бесклассовые адреса. Классфул адресует такой как 192.168.1
отклоняются. Запаздывающий номер порта не разрешается, как в 192.168.1.2:8080
.
Шестнадцатеричные числа в компонентах адреса не разрешаются, как в 192.0xa0.1.2
.
Восьмеричные числа не поддерживаются: 192.168.010.1
обрабатывается как 192.168.10.1
, нет 192.168.8.1
.
Эти ограничения IPv4 также применяются к адресам IPv6, у которых есть части адреса IPv4,
такие как совместимые с IPv4 или отображенные на IPv4 адреса.
Преобразовать адрес IPv4 expr
представленный в числовой
форме как INT
оцените адресу IPv6, представленному в числовой форме как a
VARBINARY
значение, используйте это выражение:
INET6_ATON(INET_NTOA(expr
))
Например:
mysql> SELECT
HEX(INET6_ATON(INET_NTOA(167773449)));
-> '0A000509'
Эта функция была добавлена в MySQL 5.6.3.
Учитывая IPv6 или адрес сети IPv4, представленный в числовой форме как двоичная строка, возвращает
строковое представление адреса как недвоичная строка в наборе символов соединения. Если параметром
не является допустимый адрес, INET6_NTOA()
возвраты NULL
.
INET6_NTOA()
имеет эти свойства:
Это не использует функции операционной системы, чтобы выполнить преобразования, таким образом выходная строка независима от платформы.
У строки возврата есть максимальная длина 39 (4 x 8 + 7). Учитывая этот оператор:
CREATE TABLE t AS SELECT INET6_NTOA(expr
) AS c1;
У получающейся таблицы было бы это определение:
CREATE TABLE t (c1 VARCHAR(39) CHARACTER SET utf8 DEFAULT NULL);
Строка возврата использует строчные буквы для адресов IPv6.
mysql>SELECT INET6_NTOA(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
-> 'fdfe::5a55:caff:fefa:9089'mysql>SELECT INET6_NTOA(INET6_ATON('10.0.5.9'));
-> '10.0.5.9'mysql>SELECT INET6_NTOA(UNHEX('FDFE0000000000005A55CAFFFEFA9089'));
-> 'fdfe::5a55:caff:fefa:9089'mysql>SELECT INET6_NTOA(UNHEX('0A000509'));
-> '10.0.5.9'
Эта функция была добавлена в MySQL 5.6.3.
Проверки, называют ли блокировку str
свободно использовать
(то есть, не заблокированный). Возвраты 1
если блокировка свободна
(никто не использует блокировку), 0
если блокировка используется, и
NULL
если ошибка происходит (такие как неправильный параметр).
Эта функция опасна для основанной на операторе репликации. В MySQL 5.6 регистрируется
предупреждение, если Вы используете эту функцию когда binlog_format
устанавливается в STATEMENT
. (Ошибка #47995)
Возвраты 1, если параметром является допустимый адрес IPv4, определенный как строка, 0 иначе.
mysql> SELECT IS_IPV4('10.0.5.9'),
IS_IPV4('10.0.5.256');
-> 1, 0
Для данного параметра, если IS_IPV4()
возвраты 1, INET_ATON()
(и INET6_ATON()
) возвратится не -NULL
.
Обратный оператор не является истиной: В некоторых случаях, INET_ATON()
возвраты не -NULL
когда
IS_IPV4()
возвраты 0.
Как подразумевающийся предыдущими комментариями, IS_IPV4()
более строго чем INET_ATON()
о каком составляет допустимый адрес IPv4, таким образом,
это может быть полезно для приложений, которые должны выполнить проверки strong против недопустимых
значений. Альтернативно, использовать INET6_ATON()
преобразовать адреса IPv4 во внутреннюю форму и
проверку на a NULL
результат (который указывает на недопустимый адрес).
INET6_ATON()
одинаково strong как IS_IPV4()
о проверке адресов IPv4.
Эта функция была добавлена в MySQL 5.6.3.
Эта функция берет адрес IPv6, представленный в числовой форме как двоичная строка, как возвращено INET6_ATON()
.
Это возвращается 1, если параметром является допустимый совместимый с IPv4 адрес IPv6, 0 иначе. У
совместимых с IPv4 адресов есть форма ::
.
ipv4_address
mysql>SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.5.9'));
-> 1mysql>SELECT IS_IPV4_COMPAT(INET6_ATON('::ffff:10.0.5.9'));
-> 0
Часть IPv4 совместимого с IPv4 адреса может также быть представлена, используя шестнадцатеричную
нотацию. Например, 192.168.0.1
имеет это необработанное
шестнадцатеричное значение:
mysql> SELECT
HEX(INET6_ATON('192.168.0.1'));
-> 'C0A80001'
Выраженный в совместимой с IPv4 форме, ::192.168.0.1
эквивалентно ::c0a8:0001
или (без начальных нулей) ::c0a8:1
mysql>SELECT
->IS_IPV4_COMPAT(INET6_ATON('::192.168.0.1')),
->IS_IPV4_COMPAT(INET6_ATON('::c0a8:0001')),
->IS_IPV4_COMPAT(INET6_ATON('::c0a8:1'));
-> 1, 1, 1
Эта функция была добавлена в MySQL 5.6.3.
Эта функция берет адрес IPv6, представленный в числовой форме как двоичная строка, как возвращено INET6_ATON()
.
Это возвращается 1, если параметром является допустимый отображенный на IPv4 адрес IPv6, 0 иначе. У
отображенных на IPv4 адресов есть форма ::ffff:
.
ipv4_address
mysql>SELECT IS_IPV4_MAPPED(INET6_ATON('::10.0.5.9'));
-> 0mysql>SELECT IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.5.9'));
-> 1
Как с IS_IPV4_COMPAT()
часть IPv4 отображенного на IPv4 адреса может
также быть представлена, используя шестнадцатеричную нотацию:
mysql>SELECT
->IS_IPV4_MAPPED(INET6_ATON('::ffff:192.168.0.1')),
->IS_IPV4_MAPPED(INET6_ATON('::ffff:c0a8:0001')),
->IS_IPV4_MAPPED(INET6_ATON('::ffff:c0a8:1'));
-> 1, 1, 1
Эта функция была добавлена в MySQL 5.6.3.
Возвраты 1, если параметром является допустимый адрес IPv6, определенный как строка, 0 иначе. Эта функция не полагает, что адреса IPv4 допустимые адреса IPv6.
mysql> SELECT IS_IPV6('10.0.5.9'),
IS_IPV6('::1');
-> 0, 1
Для данного параметра, если IS_IPV6()
возвраты 1, INET6_ATON()
возвратится не -NULL
.
Эта функция была добавлена в MySQL 5.6.3.
Проверки, называют ли блокировку str
используется (то
есть, заблокированный). Если так, это возвращает идентификатор соединения клиента, который содержит
блокировку. Иначе, это возвращается NULL
.
Эта функция опасна для основанной на операторе репликации. В MySQL 5.6 регистрируется
предупреждение, если Вы используете эту функцию когда binlog_format
устанавливается в STATEMENT
. (Ошибка #47995)
MASTER_POS_WAIT(
log_name
,log_pos
[,timeout
])
Эта функция полезна для управления основной/ведомой синхронизации. Это блокирует, пока ведомое
устройство не считало и применило все обновления до указанной позиции в основном журнале.
Возвращаемое значение является числом событий журнала, которых должно было ожидать ведомое
устройство совершенствоваться к указанной позиции. Функциональные возвраты NULL
если ведомый поток SQL не запускается, основная информация ведомого устройства не инициализируется,
параметры неправильные, или ошибка происходит. Это возвращается -1
если
тайм-аут был превышен. Если ведомый поток SQL останавливается в то время как MASTER_POS_WAIT()
ожидает, функциональные возвраты NULL
. Если ведомое устройство проходит указанную позицию, функция
сразу возвращается.
Если a timeout
значение определяется, MASTER_POS_WAIT()
ожидание остановок, когда timeout
секунды протекли. timeout
должно быть больше чем 0; нуль или отрицательный timeout
средства никакой тайм-аут.
Эта функция опасна для основанной на операторе репликации. В MySQL 5.6 регистрируется
предупреждение, если Вы используете эту функцию когда binlog_format
устанавливается в STATEMENT
. (Ошибка #47995)
Возвращает данное значение. Когда использующийся произвести столбец набора результатов, NAME_CONST()
заставляет столбец иметь имя. Параметрами должны быть константы.
mysql> SELECT NAME_CONST('myname',
14);
+--------+| myname |+--------+| 14 |+--------+
Эта функция для внутреннего пользования только. Сервер использует это при записи операторов из сохраненных программ, которые содержат ссылки на локальные переменные программы, как описано в Разделе 19.7, "Двоичное Журналирование Сохраненных Программ", Вы могли бы видеть эту функцию в выводе от mysqlbinlog.
Выпускает блокировку, названную строкой str
это было
получено с GET_LOCK()
. Возвраты 1
если
блокировка была выпущена, 0
если блокировка не была установлена этим
потоком (когда блокировка не выпускается), и NULL
если именованная
блокировка не существовала. Блокировка не существует, если она никогда не получалась звонком GET_LOCK()
или если это было ранее выпущено.
DO
оператор удобен, чтобы использовать с RELEASE_LOCK()
. См. Раздел 13.2.3,"DO
Синтаксис".
Эта функция опасна для основанной на операторе репликации. В MySQL 5.6 регистрируется
предупреждение, если Вы используете эту функцию когда binlog_format
устанавливается в STATEMENT
. (Ошибка #47995)
Сны (паузы) для числа секунд, данных duration
параметр,
затем возвращается 0. Если SLEEP()
прерывается, это возвращается 1. У продолжительности
может быть дробная часть.
Эта функция опасна для основанной на операторе репликации. В MySQL 5.6 регистрируется
предупреждение, если Вы используете эту функцию когда binlog_format
устанавливается в STATEMENT
. (Ошибка #47995)
Возвращает Универсальный Уникальный идентификатор (UUID), сгенерированный согласно "DCE 1.1: Вызов удаленной процедуры"
(Приложение A) CAE (Общая прикладная среда) Спецификации, опубликованные Open Group в октябре 1997
(Номер документа C706,
UUID разрабатывается как число, которое глобально уникально в пространстве и времени. Два звонка UUID()
как
ожидают, генерируют два различных значения, даже если эти вызовы будут выполняться на двух отдельных
компьютерах, которые не соединяются друг с другом.
UUID является 128-разрядным числом, представленным a utf8
строка пяти
шестнадцатеричных чисел в aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
формат:
Первые три числа сгенерированы от метки времени.
Четвертое число сохраняет временную уникальность в случае, если значение метки времени теряет монотонность (например, из-за летнего времени).
Пятое число является числом узла IEEE 802, которое обеспечивает пространственную уникальность. Случайным числом заменяют, если последний не доступен (например, потому что у главного компьютера нет никакой карты Ethernet, или мы не знаем, как найти аппаратный адрес интерфейса на Вашей операционной системе). В этом случае пространственная уникальность не может быть гарантирована. Однако, у коллизии должна быть очень низкая вероятность.
В настоящий момент Мак адрес интерфейса принимается во внимание только на FreeBSD и Linux. На других операционных системах MySQL использует в произвольном порядке сгенерированное 48-разрядное число.
mysql> SELECT UUID();
-> '6ccd780c-baba-1026-9564-0040f4311e29'
Хотя UUID()
значения предназначаются, чтобы быть уникальными, они
являются не обязательно неотгадываемыми или непредсказуемыми. Если непредсказуемость требуется,
значения UUID должны быть сгенерированы некоторый другой путь.
UUID()
не работает с основанной на операторе репликацией.
Возвращает "короткий" универсальный
идентификатор как 64-разрядное целое без знака (а не строковая форма 128-разрядный идентификатор как
возвращено UUID()
функция).
Значение UUID_SHORT()
как гарантируют, будет уникален, если следующие условия будут содержать:
server_id
из текущего узла уникально среди Вашей группы
основных и ведомых серверов
server_id
между 0 и 255
Вы не задерживаете свое системное время для Вашего сервера между перезапусками mysqld
Вы не вызываете UUID_SHORT()
в среднем больше чем 16 миллионов раз в секунду
между перезапусками mysqld
UUID_SHORT()
возвращаемое значение создается этот путь:
(server_id & 255) << 56+ (server_startup_time_in_seconds << 24)+ incremented_variable++;
mysql> SELECT
UUID_SHORT();
-> 92395783831158784
Отметьте это UUID_SHORT()
не работает с основанной на операторе репликацией.
В INSERT ... ON
DUPLICATE KEY UPDATE
оператор, можно использовать VALUES(
функция в col_name
)UPDATE
пункт, чтобы обратиться к значениям столбцов от INSERT
часть оператора. Другими словами, VALUES(
в col_name
)UPDATE
пункт относится к значению col_name
это было бы вставлено, не имел никакого двойного ключевого произошедшего конфликта. Эта функция
особенно полезна в многократной строке, вставляет. VALUES()
функция значима только в ON
DUPLICATE KEY UPDATE
пункт INSERT
операторы и возвраты NULL
иначе. См. Раздел
13.2.5.3,"INSERT ... ON DUPLICATE KEY UPDATE
Синтаксис"
.
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);