Сервер 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
. Во многих случаях этот синтаксис совместим с применяющимся в OracleLOAD 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;