Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
165
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

Глава Встроенные функции

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