Переменные – это символические имена, ссылающиеся на изменяемые значения. Имя переменной может состоять из чисел, букв, знаков подчеркивания и доллара, а также точек. К нему всегда добавляется символ @, чтобы не возникала путаница с именами столбцов и ключевыми словами.
В MySQL переменные не требуют инициализации. Если происходит обращение к неопределенной переменной, ей присваивается значение NULL. По окончании сеанса переменные автоматически удаляются.
Переменные можно использовать везде, где допускается использование имен столбцов. Запрещается указывать переменные в предложениях LIMIT и IGNORE, а также использовать переменные для именования столбцов.
Пример.
mysql> SET @Special_ID=2;
mysql> SELECT ID, NAME FROM table1 WHERE ID=@Special_ID;
Программа MySQL назначает переменной тип лишь в момент инициализации, поэтому нужно внимательно следить за соответствием типов. Даже если переменная содержит число, но ее тип был определен как строковый, в ходе числовых операций потребуется выполнять преобразование типов, что может сказаться на производительности.
Разрешается присваивать переменной значение прямо в инструкции SELECT. Для этого предназначен оператор :=. Правым операндом может быть произвольное выражение, допустимое в списке возвращаемых столбцов.
Пример.
SELECT @Special_ID:=ID FROM table1 WHERE Name= ‘Name2’;
SELECT ID, Name FROM tablr1 WHERE ID=@Special_ID;
Операция присваивания в предложении SELECT выполняется тогда, когда строка форматируется и посылается клиенту. Следовательно, в предложении WHERE будет использовано то значение переменной, которое записалось в нее последним.
Операторы – это знаки записи математических и логических операций. Большинство операторов бинарно: один операнд записывается слева и один – справа. Существуют такжу унарные операторы, принимающие только один операнд.
За исключением оператора присваивания, все остальные операторы делятся на четыре категории: арифметические, реляционные, логические и побитовые.
Арифметические операторы выполняют простейшие арифметические операции, реляционные – операции сравнения. С помощью логических операторов строятся булевы выражения, а побитовые работают с битовым представлением чисел.
Если оба операнда принадлежат к одному типу, тип результата определяется тривиально. Строки, участвующие в арифметических выражениях, преобразуются в числа. Целые числа преобразуются в числа с плавающей запятой, а числа – в значения дата/время.
Арифметические операторы.
Арифметическими операндами могут быть только числа.
Таблица 2.4 – Арифметические операторы
Оператор
Операция
+
Сложение
-
Вычитание и унарное отрицание
*
Умножение
/
Деление
%
Деление по модулю
Логические операторы.
Логические операторы работают с булевыми величинами. У каждого оператора есть две формы записи: словесная и символьная.
Таблица 2.5 – Логические операторы
Оператор
Операция
AND, &&
Логическое умножение (И)
OR, │
Логическое сложение (ИЛИ)
NOT, !
Логическое отрицание (НЕ)
Побитовые операторы.
Побитовые операторы работают с числами, как с цепочками битов.
Таблица 2.6 – Побитовые операторы
Оператор
Операция
\
Побитовое сложение (ИЛИ
&
Побитовое умножение (И))
<<
Сдвиг всех битов влево
>>
Сдвиг всех битов вправо
~
Побитовое отрицание (НЕ)
Побитовые операции И, ИЛИ, НЕ работают также, как и их логические эквиваленты, но для каждой пары битов выполняется отдельная операция.
Операторы сравнения.
Если в операциях сравнения участвует значение даты/времени, программа MySQL попытается привести к этому типу второй операнд. Такое возможно для строки или числа состоящего из восьми цифр. Первые четыре цифры считаются номером года, следующие две номером месяца, а последние две – номером дня. В случае когда операнд представлен в другом формате, произойдет противоположное преобразование: значение даты/времени – в строку или число.
По умолчанию строки сравниваются в алфавитном порядке без учета регистра. Ключевое слово BINARY заставляет учитывать регистр при сортировке строк.
Значения, указанные в скобках специальных операторов сравнения, приводятся к типу левого операнда. Если, например, целое число сравнивается с группой чисел с плавающей запятой, то последние будут округлены.
Метасимвол % в шаблоне поиска строковых данных соответствует произвольному числу символов, а метасимвол _ - одиночному символу. Остальные символы воспринимаются буквально. Если необходимо выполнить сравнение с самим из этих символов, то нужно защитить их от интерпретации с помощью обратной косой черты. Можно воспользоваться предложением ESCAPE, которое задает символ, служащий началом управляющих последовательностей в данном конкретном шаблоне.
Таблица 2.7 – Операторы сравнения
Оператор
Проверка
<
Меньше
>
Больше
<=
Меньше или равно (не больше)
>=
Больше или равно (не меньше)
BETWEEN минимум AND максимум
Принадлежать диапазону
IN (…)
Членство в множестве
NOT IN (…)
Отсутствие членства в множестве
=
Равно
<=>
Не равно (допускается сравнение со значение NULL)
LIKE
Соответствие шаблону
NOT LIKE
Не соответствие шаблону
REGEXP, RLIKE
Соответствие регулярному выражению
NOT REGEXP, NOT RLIKE
Не соответствие регулярному выражению
!=, <>
Не равно
IS NULL
Равно NULL
IS NOT NULL
Не равно NULL
В регулярных выражениях применяется специальный язык описания шаблонов, они всегда чувствительны к регистру символов.