В состав сервера MySQL входит ряд расширений, которых, возможно, вы не найдете в других базах данных SQL. Помните, что если вы используете их, ваш код перестанет быть переносимым на другие серверы SQL. В некоторых случаях вы можете писать код, включающий расширения MySQL, но остающийся переносимым, используя для этого форму комментариев /*! … */. В этом случае сервер MySQL разбирает и выполняет код внутри комментария, как и любые другие SQL-операторы, а все другие серверы SQL расширение проигнорируют. Например:
SELECT /*! STRAIGHT_JOIN */ имя_столбцаFROM таблица1, таблица2 WHERE …
Если после символа ‘!’ добавить номер версии, синтаксис внутри комментария будет выполняться только сервером MySQL указанной и более поздних версий:
CREATE /*132302 TEMPORARY */ TABLE t (a INT);
Это означает, что если работа выполняется в версии MySQL 3.23.02 или более поздней, то ключевое слово TEMPORARY будет использовано.
В приведенном ниже списке описаны расширения MySQL по категориям.
- Организация данных на диске.
Сервер MySQL отображает каждую базу данных на подкаталог внутри каталога данных MySQL, а таблицы внутри базы – на имена файлов в этом каталоге. Отсюда вытекает несколько следствий:
- Имена баз данных и таблиц MySQL зависят от регистра в средах операцион
ных систем, в которых имена файлов чувствительны к регистру символов
(большинство Unix-систем). - Можно использовать стандартные системные команды для резервного копиро
вания, переименования, перемещения, удаления и копирования таблиц, управляемых механизмами хранения My ISAM или ISAM.
Например, чтобы переименовать таблицу MylSAM, потребуется переименовать файлы .MYD, .MYI и . frra, которые относятся к таблице.
Имена баз данных, таблиц, индексов, столбцов и псевдонимы могут начинаться с
цифры (но не должны состоять только из цифр).
- Общий синтаксис языка.
- Строки могут ограничиваться и одиночными и двойными кавычками.
- Символ ‘V используется в строках как управляющий.
- Внутри SQL-операторов можно получать доступ к таблицам из разных баз дан
ных посредством синтаксиса имя_ базы_ да нных. имя таблицы. Некоторые серверы
SQL предоставляют ту же функциональность, но называют ее пространством
пользователя (User space). Сервер MySQL не поддерживает табличных про
странств, как в следующем операторе: CREATE TABLE ralph.my_table.. .IN
my_tablespace.
- Синтаксис SQL-операторов.
- Операторы ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE И REPAIR TABLE.
- Операторы CREATE DATABASE И DROP DATABASE.
- Оператор DO.
- EXPLAIN SELECT – для получения описания способа объединения таблиц в за
просе. - Операторы FLUSH и RESET.
- Оператор SET.
- Оператор show.
- LOAD DATA INFILE. Во многих случаях этот синтаксис совместим с аналогич
ным синтаксисом Oracle. - RENAME TABLE.
- REPLACE вместо DELETE + INSERT.
- Конструкции CHANGE имя_столбца, DROP имя_столбца, DROP INDEX, IGNORE и
RENAME в операторе ALTER TABLE. Использование множественных конструкций
ADD, ALTER, DROP И CHANGE в операторе ALTER TABLE. - Использование имен индексов, индексов в префиксах полей, а также конст
рукций INDEX ИЛИ KEY В операторе CREATE TABLE. - Использование IF EXISTS вместе с DROP TABLE.
- Можно удалять несколько таблиц одним оператором DROP TABLE.
- Конструкции ORDER BY и LIMIT В операторах UPDATE И DELETE.
- Синтаксис INSERT INTO…SET имя_столбца = ….
- Конструкция DELAYED в операторах INSERT и REPLACE.
- Конструкция LOW_PRIORITY В операторах INSERT, REPLACE, DELETE И UPDATE.
- Использование INTO OUTFILE и STRAIGHT_JOIN в операторе SELECT.
- ОПЦИЯ SQL_SMALL_RESULT оператора SELECT.
Нет необходимости перечислять все выбранные столбцы в конструкции GROUP
BY. Это обеспечивает лучшую производительность для некоторых очень спе
цифических, но вполне нормальных запросов.
присваивания := в операторах:
mysql; SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg
-; FROM test_table; mysql; SELECT @tl:=(@t2:=l)+@t3:=4,@tl,@t2,@t3;
мТипы столбцов.
• Типы столбцов mediumint, set, enum и различные варианты типов blob и text.
• Атрибуты столбцов AUTO_INCREMENT, BINARY, NULL, UNSIGNED И ZEROFILL.
- Функции и операции.
- Чтобы облегчить жизнь пользователям, привыкшим к другим SQL-средам,
сервер MySQL поддерживает псевдонимы для многих функций. Например, все
строковые функции поддерживают как стандартный синтаксис SQL, так и син
таксис ODBC. - Сервер MySQL воспринимает операции и | | как логическое И (AND) и
логическое ИЛИ (OR), по аналогии с языком программирования С. В кон
тексте сервера MySQL операции | | и OR являются синонимами, равно как и
и AND. По этой причине MySQL не поддерживает стандартную SQL-операцию
| | для конкатенации строк. Вместо этого необходимо применять функцию
CONCAT (). Поскольку CONCAT () принимает любое количество аргументов, пре
образовать все операции | | очень легко. - Использование COUNT(DISTINCT список), где список содержит более одного
элемента. - Все сравнения строк по умолчанию чувствительны к регистру, а порядок сор
тировки определяется текущим выбранным набором символов (по умолчанию
ISO-8859-1 Latinl). Если это не подходит, потребуется объявить столбец с ат
рибутом BINARY либо воспользоваться приведением к BINARY, что заставит вы
полнять сравнение и сортировку в соответствии с кодами символов, а не в лек
сикографическом порядке. - Операция % является синонимом функции MOD (). То есть, выражение N % м
эквивалентно MOD (N, м). ‘%’ поддерживается для удобства программистов на
языке С и достижения совместимости с СУБД PostgresSQL. - Операции =, о,=,, ;=, ;, «, »,=;, AND, OR и LIKE могут применяться для
сравнения столбцов слева от конструкции from в операторах SELECT, например:
mysql; SELECT col1=1 AND col2=2 FROM имя таблицы; - Функция LAST_INSERT_ID () возвращает самое последнее значение
AUTO_INCREMENT. - LIKE можно применять к числовым столбцам.
- Расширенные операции обработки регулярных выражений REGEXP и NOT
REGEXP.
- Функции C0NCAT () и CHAR () принимают один и более аргументов.
- Функции BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD!),
ENCRYPT (),MD5(), ENCODE(), DECODE (), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS ()
И WEEKDAY !). - Применение TRIMO для усечения подстрок. Стандартный язык SQL поддер
живает только удаление последовательностей одинаковых символов. - Возможность в конструкции GROUP BY обращаться к функциям STD (),
BIT__OR(),BIT_AND(),BIT_XOR() И GROUP_CONCAT().
Для ознакомления с перечнем новых расширений, которые планируется добавить в сервер MySQL, а также с их приоритетностью, просмотрите список TODO по адресу http://dev.mysql.com/doc/mysql/en/TODO.html. В настоящем руководстве представлена последняя на данный момент версия списка TODO. См. также раздел MySQL и будущее (списки TODO).