:: 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.