MySQL. Библиотека профессионала - Аткинсон Л
..pdfГлава Встроенные функции
SESSION_USER()
Это синоним функции USER
Это синоним функции USER
USER()
Эта функция возвращает имя пользователя, начавшего текущий сеанс работы с сервером (листинг 12.5). Сообщается также имя компьютера, за которым работает пользователь.
SELECT
Эта функция сообщает номер версии сервера MySQL (листинг
mysql> SELECT
Управляющие функции
Описанные ниже функции управляют выполнением программного кода. Функции CASE и CASE WHEN реализованы подобно инструкциям языков третьего поколения и не используют скобки, но в остальном они аналогичны функциям. Две функции вания, а также функция, заставляющая главную базу данных дождаться синхронизации подчиненной базы данных, полезны при работе в многопользовательской среде.
Управляющие функции
Синтаксис конструкции CASE таков:
CASE WHEN THEN [WHEN значение2 THEN
[ELSE
END
Конструкция CASE вычисляет проверяемое выражение и сравнивает результат с одним из значений, указанных в предложении WHEN. Если найдено совпадение, воз вращается соответствующее значение предложения THEN. В противном случае воз
вращается значение по умолчанию.
В листинге 12.7 демонстрируется применение конструкции CASE по отношению к
таблице, состоящей из пяти строк. Когда идентификатор равен 1 или 2, возвращается строка One или Two, иначе отображается строка Other Value.
mysql> SELECT ID, CASE ID
WHEN THEN
WHEN 2 THEN
ELSE
END AS FROM item;
5 rows in set |
sec) |
Тип возвращаемого значения соответствует типу аргумента самого первого пред ложения THEN.
WHEN
Синтаксис альтернативного варианта конструкции CASE таков:
CASE
WHEN THEN
[WHEN условие2 THEN
[ELSE
END
Глава Встроенные функции
Здесь проверяется каждое условие по отдельности. Возвращается то значение, для которого условие является истинным. Возвращаемое значение может быть произ вольным выражением, в том числе результатом вызова функции.
SELECT ID, CASE |
|
|
|
|
WHEN |
ID |
3 |
THEN |
2) |
WHEN |
ID |
4 |
THEN |
ID |
ELSE Name
END AS
FROM item;
5 rows in set (0.00 sec)
Поскольку результат конструкции CASE может менять свой тип в зависимости от условия, столбцу присваивается тип аргумента самого первого предложения THEN.
GЕТ_LОСК(имя, тайм:аут)
ФункцияGET_LOCK()запрашивает именованную блокировку на указанное число секунд. Функция не завершится до тех пор, пока не истечет период тайм аута или бло кировка не будет получена.
Одному сеансу может принадлежать только одна блокировка. Вызов функции GET_LOCK() приводит к снятию всех удерживаемых блокировок, но лучше все же снимать ихявно с помощью функцииRELEASE_LOCK(). Блокировка снимается также в случае завершения сеанса.
Наличие блокировки не дает ее владельцу никаких преимуществ и никак не огра ничивает работу других сеансов. Тем не менее при согласованном име нованных блокировок несколькими программами появляется возможность реализо вать блокирование произвольного уровня детализации. Пример использования функцииGET_LOCK()для блокирования записей приводился в главе 9, "Транзакции и параллельные вычисления". Похожий пример дан в листинге 12.9.
SELECT GET
Управляющие функции
1 row in set (0.00 sec)
mysql> UPDATE item SET WHERE Query OK, 1 row affected sec) Rows matched 1 Changed 1 Warnings 0
SELECT RELEASE
IF значение истина,
Функция возвращает разные значения в зависимости от того, истинным или ложным является проверяемое выражение. Результат проверки приводится к целому типу.
Как и в случае конструкции тип результата функции IF нельзя определить заранее. Если одно из возвращаемых значений — строка, результат будет строковым. Если же это условие не выполняется, но одно из значений является числом с плаваю щей запятой, то и результат будет аналогичным. В противном случае оба значения приводятся к целочисленному типу.
В листинге 12.10 с помощью функции IF является ли текущий день будним или выходным.
_значение)
Функция возвращает проверяемое значение, если оно не равно NULL. В противном случае возвращается второй аргумент. В листинге 12.11 показано, как с помощью этой функции заменить значения NULL описательной фразой.
Глава Встроенные функции
mysql> SELECT Name,
AS Description FROM item;
5 rows in set (0.01 sec)
позиция)
Функция дожидается, пока подчиненный сервер синхрони зируется с главным сервером в процессе репликации. Необходимо указать имя жур нального файла и позицию, которой должен достигнуть подчиненный сервер. Если данный компьютер не сконфигурирован в качестве главного сервера, функция немед ленно возвращает NULL. Если же подчиненный сервер еще не запущен, функция бло кируется до тех пор, пока сервер не запустится и не достигнет указанной позиции журнального файла.
Функция возвращает число событий, зарегистрированных в процессе ожидания. Подробнее о репл икации рассказывается в главе 29, "Распределенные базы данных".
_значение1,
Функция возвращает NULL, если оба проверяемых значения равны друг другу. В противном случае возвращается первый аргумент. С помощью этой функции удобно преобразовывать значения 0 в NULL (листинг 12.12).
mysql> SELECT Name, 0) AS Inventory FROM item;
Статистические функции
Функция RELEASE_LOCK снимает указанную именованную блокировку, которая ранее была получена с помощью функции Если имя блокировки не было зарегистрировано, возвращается NULL. Пример использования этой функции был приведен при описании функции GET_LOCK
Статистические функции
Описанные ниже функции выполняются по отношению к совокупности значений целого столбца. Если предложение GROUP отсутствует, обработке подвергается каждая запись. Ячейки со значением NULL не входят в оценочное множество. В лис тинге 12.13 приведено определение таблицы, которая используется в примерах дан ного раздела.
CREATE TABLE
ID INT NOT NULL
Team
Score INT,
PRIMARY
INSERT INTO grouptest (Team, Score) VALUES
11)
45)
98)
19)
11)
37),
17)
75)
23)
91)
80)
63)
55)
89)
64) 5)
(столбец)
Функция AVG вычисляет среднее арифметическое группы значений (листинг Это число определяется путем суммирования вс ех элементов группы и деления результата на общее число элементов.
Глава Встроенные функции
mysql> SELECT Team,
FROM GROUP BY Team;
Функция BIT_AND выполняет побитовое умножение всех элементов группы и возвращает результат в виде целого числа (см. ниже).
Функция выполняет побитовое сложение всех элементов группы и воз вращает результат в виде целого числа (листинг 12.15).
mysql> SELECT Team,
FROM GROUP BY Team;
Функция COUNT подсчитывает количество элементов группы, не равных NULL. Если нужно определить число записей в таблице, можно вместо имени столбца ука зать звездочку Предикат DISTINCT позволяет исключить из группы повторяю щиеся значения (листинг 12.16).
Статистические функции
SELECT Team, |
Score) |
FROM |
|
GROUP BY Team; |
|
Этот вариант функции COUNT возвращает число уникальных комбинаций столб цов, указанных в списке аргументов (см. листинг 12.16).
Функция МАХ возвращает значение наибольшего элемента группы (листинг Максимальным строковым значением считается то, которое стоит последним по алфа виту. Поскольку даты тоже можно упорядочивать, то максимальной датой считается та, которая идет последней по порядку. Правда, двухзначные номера годов могут ваться неправильно, если они не хранятся в столбце типа YEAR. Следовательно, может потребоваться преобразовать их в четырехзначные значения путем добавления нуля с помощью функции DATE_ADD
SELECT Team,
FROM
GROUP BY Team;
Функция MIN возвращает значение наименьшего элемента группы (см. Минимальным строковым значением считается то, которое с тоит пер вым по алфавиту.
Глава Встроенные функции
Функция STD вычисляет среднее отклонение элементов группы (листинг 12.18).
SELECT
FROM
GROUP BY Team;
Это синоним функции STD
Функция SUM вычисляет сумму элементов группы (листинг 12.19). Строки и даты приводятся к целому типу.
SELECT Team,
FROM grouptest
GROUP BY Team;
Математические функции
Описанные ниже функции выполняют различные математические операции. В качестве аргументов большинство из них принимает числа с плавающей запятой и возвращает результат аналогичного типа.
Математические функции 161
Эта функциявозвращает модуль числа (листинг
SELECT
Эта функция возвращает арккосинус числа (листинг 12.21). Диапазон допустимых значений — от 1 до 1. Вне этого диапазона значение арккосинуса не определено.
mysql> SELECT
Эта функция возвращает арксинус числа (листинг 12.22). Диапазон допустимых значений — от 1 до 1.Вне этого диапазона значениеарксинуса не определено.
SELECT