:: DEVELOPER ZONE
Сервер MySQL включает в себя ряд расширений, которые могут отсутствовать в
других базах данных SQL. Если вы их используете, то следует иметь в виду,
что такой код не будет переносимым на другие SQL-серверы. В некоторых
случаях можно написать код, включающий расширения MySQL, но, тем не менее,
являющийся переносимым, воспользовавшись комментариями вида /*! ... */. В
этом случае сервер MySQL будет анализировать и выполнять данный код внутри
этого комментария как обычную команду MySQL, в то время как другие
SQL-серверы будут игнорировать данное расширение. Например:
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
При добавлении номера версии после '!' это выражение будет исполняться
только в случае, если номер данной версии MySQL равен указанному номеру
или больше:
CREATE /*!32302 TEMPORARY */ TABLE t (a int);
Это означает, что при наличии версии 3.23.02 или выше сервер MySQL будет
использовать ключевое слово TEMPORARY.
Ниже приводится перечень расширений MySQL:
Типы полей MEDIUMINT, SET, ENUM и различные типы BLOB и TEXT.
Атрибуты полей AUTO_INCREMENT, BINARY, NULL, UNSIGNED и ZEROFILL.
Все сравнения строк по умолчанию являются независимыми от регистра
символов с порядком сортировки, заданным текущей кодировкой
(ISO-8859-1 Latin1 по умолчанию). Если вас это не устраивает, то можно
объявить столбцы с атрибутом BINARY или использовать явное приведение
типов BINARY, в результате чего сравнение будет выполняться в
соответствии с порядком ASCII, используемом на хосте сервера MySQL.
Сервер MySQL сопоставляет каждую базу данных с подкаталогом в каталоге данных MySQL, а таблицы внутри базы данных - с именами файлов в этом подкаталоге базы данных.
Это правило имеет несколько следствий:
В сервере MySQL, работающем под операционными системами с зависимыми от регистра символов именами файлов (таковыми являются большинство Unix-систем), имена баз данных и имена таблиц являются зависимыми от регистра символов (see Раздел 6.1.3, «Чувствительность имен к регистру»).
Имена базы данных, таблицы, индекса, столбца или псевдонимы могут начинаться с цифры (но не должны содержать только цифры).
Можно использовать стандартную систему команд выполнения
резервного копирования, переименования, перемещения, удаления и
копирования таблиц. Например, для переименования таблицы
необходимо переименовать соответствующие этой таблице файлы .MYD,
.MYI и .frm.
В командах SQL можно обращаться к таблицам из разных баз данных с
помощью выражения db_name.tbl_name. В некоторых SQL-серверах
обеспечивается точно такая же функциональная возможность, но она
называется User space. Сервер MySQL не поддерживает табличные
пространства (как в выражении: CREATE TABLE ralph.my_table...IN my_tablespace).
LIKE разрешается на числовых столбцах.
Использование INTO OUTFILE и STRAIGHT_JOIN в команде SELECT (see Раздел 6.4.1, «Синтаксис оператора SELECT»).
Опция SQL_SMALL_RESULT в команде SELECT.
Использование EXPLAIN SELECT для получения описаний объединения
таблиц.
Использование индексных имен, индексов на префиксах полей, а также
INDEX или KEY в команде CREATE TABLE (see Раздел 6.5.3, «Синтаксис оператора CREATE TABLE»).
Использование TEMPORARY или IF NOT EXISTS с CREATE TABLE.
Использование COUNT(DISTINCT list), где list представляет собой более
чем один элемент.
Использование CHANGE col_name, DROP col_name или DROP INDEX, IGNORE
или RENAME в команде ALTER TABLE (see Раздел 6.5.4, «Синтаксис оператора ALTER TABLE»).
Использование RENAME TABLE. See Раздел 6.5.5, «Синтаксис оператора RENAME TABLE».
Использование нескольких выражений ADD, ALTER, DROP или CHANGE в
команде ALTER TABLE.
Использование DROP TABLE с ключевыми словами IF EXISTS.
Возможность удаления нескольких таблиц одной командой DROP TABLE.
Условие LIMIT в команде DELETE.
Условие DELAYED в командах INSERT и REPLACE.
Условие LOW_PRIORITY в командах INSERT, REPLACE, DELETE и UPDATE.
Использование LOAD DATA INFILE. Во многих случаях этот синтаксис
совместим с применяющимся в Oracle LOAD DATA INFILE (see Раздел 6.4.9, «Синтаксис оператора LOAD DATA INFILE»).
Команды ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE и REPAIR TABLE.
Команда SHOW (see Раздел 4.5.6, «Синтаксис команды SHOW»).
Строки могут быть заключены в кавычки с помощью или '"', или ''', но
не просто '''.
Использование символа экранирования '\'.
Команда SET (see Раздел 5.5.6, «Синтаксис команды SET»).
Нет необходимости называть имена всех выбранных столбцов в части GROUP BY. Это дает лучшую производительность для некоторых очень
специфических, но вполне нормальных запросов (see Раздел 6.3.7, «Функции, используемые в операторах GROUP BY»).
Можно указывать ASC и DESC с GROUP BY.
Чтобы упростить работу для пользователей, привыкших к иным условиям среды SQL, в сервере MySQL поддерживаются псевдонимы для многих функций. Например, для всех строковых функций поддерживается синтаксис как ANSI SQL, так и ODBC.
Сервер MySQL понимает операторы || и && для обозначения логических ИЛИ
(OR) и И (AND), как это принято в языке программирования C. В сервере
MySQL || и ИЛИ (OR) являются синонимами, так же, как && и И (AND).
Благодаря этому удобному синтаксису, в сервере MySQL не поддерживается
оператор ANSI SQL || для конкатенации строк: вместо него используется
функция CONCAT(). Поскольку функция CONCAT() принимает любое
количество аргументов, то в сервере MySQL можно легко модифицировать
использование оператора ||.
CREATE DATABASE или DROP DATABASE (see Раздел 6.5.1, «Синтаксис оператора CREATE DATABASE»).
Оператор % является синонимом для MOD(). Т.е. N % M эквивалентно
MOD(N,M). Оператор % поддерживается для программистов на C и для
совместимости с PostgreSQL.
Операторы =, <>, <=,<, >=,>, <<, >>, <=>, AND, OR или LIKE могут
использоваться при сравнении столбцов слева от FROM в командах SELECT.
Например:
mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
Функция LAST_INSERT_ID() (see Раздел 8.4.3.31, «mysql_insert_id()»).
Операторы REGEXP и NOT REGEXP расширенных регулярных выражений.
CONCAT() или CHAR() с одним аргументом или более чем с двумя
аргументами (в сервере MySQL эти функции могут принимать любое
количество аргументов).
Функции BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(),
PASSWORD(), ENCRYPT(), MD5(), ENCODE(), DECODE(), PERIOD_ADD(),
PERIOD_DIFF(), TO_DAYS() или WEEKDAY().
Использование функции TRIM() для усечения подстрок. В ANSI SQL
поддерживается только удаление единичных символов.
Операция GROUP BY для функций STD(), BIT_OR() и BIT_AND().
Использование REPLACE вместо DELETE + INSERT (see Раздел 6.4.8, «Синтаксис оператора REPLACE»).
Команды FLUSH, RESET и DO.
Возможность устанавливать переменные в команде с помощью :=:
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table; SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
© 1995-2005 MySQL AB. All rights reserved.
