В MySQL есть ряд функций, которые трудно отнести к какой-то конкретной группе, тем не менее, они часто бывают полезными.
Информационные функции
Функция VERSION() возвращает текущую версию MySQL.
SELECT VERSION();
Результат: 10.1.13-MariaDB
Функция DATABASE() возвращает имя текущей базы данных. Если в настоящий момент никакая база данных не является активной, то вернется пустая строка.
SELECT DATABASE();
Результат: example.
Следующие функции возвращают имя текущего активного пользователя в формате логин@имя_хоста:
- USER() ;
- SYSTEM_USER() ;
- SESSION_USER().
SELECT SESSION_USER();
Результат: root@localhost.
Иногда требуется извлечь из имени пользователя подстроку логина без имени хоста. Это можно сделать следующим запросом:
SELECT SUBSTRING_INDEX(SESSION_USER(),"@",1);
Результат: root.
Функция CONNECTION_ID() возвращает идентификатор текущего соединения с MySQL.
SELECT CONNECTION_ID();
Результат: 3.
Функция INET_ATON(ip-адрес) возвращает по заданному ip-адресу его числовое значение. Функция INET_NTOA(число) наоборот возвращает по числовому значению ip-адреса его представление в виде октетов, разделенных точками.
SELECT INET_ATON("10.20.0.1");
Результат: 169082881.
SELECT INET_NTOA("169082881");
Результат: 10.20.0.1
Функции шифрования
Шифрование бывает двух видов:
- Обратимое;
- Необратимое.
При обратимом шифровании зашифрованный текст может быть дешифрован. При необратимом шифровании в результате получается хеш, по которому невозможно узнать исходную строку.
Чаще всего шифрование требуется для паролей и адресов электронной почты. Для шифрования паролей более удобно необратимое шифрование. Пароль один раз шифруется и сохраняется в базе данных в виде хеша. При вводе пароля пользователем, строка снова шифруется и сравнивается с хешем, который хранится в базе. Таким образом, дешифрование для паролей не требуется.
Адреса электронной почты тоже имеет смысл хранить в зашифрованном виде, чтобы защитить пользователей от спама. Но на электронные адреса постоянно нужно отправлять письма, поэтому для них более актуальным будет обратимое шифрование.
К функциям необратимого шифрования относятся:
- PASSWORD(строка);
- Md5(строка);
- SHA1(строка) .
Отличаются эти функции алгоритмами шифрования. То есть для одной и той же строки они дадут различные результаты.
SELECT PASSWORD(“kanban”);
Результат: \E8B697EADB219A4FF7630A837B7D84A70EF02074*
SELECT md5("kanban");
Результат: 7f506d692b6f2fa4d74817a052371ae3
SELECT sha1("kanban");
Результат: 4073e825874eb561d37f354dd6aa8e431850ed5a
Функции обратимого шифрования являются парными. Каждой шифрующей функции поставлена в соответствие дешифрующая:
- AES_ENCRYPT(строка, ключ) и AES_DECRYPT(строка, ключ);
- DES_ENCRYPT(строка, ключ) и DES_DECRYPT(строка, ключ);
- ENCODE(строка, ключ) и DECODE(строка, ключ);
Аргумент "ключ" является ключом дешифрования.
SELECT AES_DECRYPT(AES_ENCRYPT('zhaolon@yandex.ru', '123'),'123');
SELECT DES_DECRYPT(DES_ENCRYPT('zhaolon@yandex.ru', '123'),'123');
SELECT DECODE(ENCODE('zhaolon@yandex.ru', '123'),'123');
Результат: zhaolon@yandex.ru
Битовые функции
Битовые функции вначале переводят аргументы в последовательность битов, а потом выполняют операции между соответствующими битами. Все битовые функци возвращают результат как беззнаковое 64-битовое число. К битовым относятся следующие функции:
| - побитовое ИЛИ ;
SELECT 28 | 15;
Результат: 31.
& - побитовое И;
SELECT 28 & 15;
Результат: 12.
~ - инвертирование битов;
SELECT 9 & ~ 1;
Результат: 8.
- побитовый сдвиг влево;
> > - побитовый сдвиг вправо.
SELECT 9
Результат: 18.
SELECT 9 > > 1;
Результат: 4.