1.9.2 Запуск MySQL в режиме ANSI | Оглавление | 1.9.4 Отличия MySQL от ANSI SQL92 |
Сервер 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
.BINARY
или использовать явное приведение типов BINARY
, в результате чего сравнение будет выполняться в соответствии с порядком ASCII, используемом на хосте сервера MySQL.db_name.tbl_name
. В некоторых SQL-серверах обеспечивается точно такая же функциональная возможность, но она называется User space
. Сервер MySQL не поддерживает табличные пространства (как в выражении: CREATE TABLE ralph.my_table...IN my_tablespace
).LIKE
разрешается на числовых столбцах.INTO OUTFILE
и STRAIGHT_JOIN
в команде SELECT
(see section 6.4.1 Синтаксис оператора SELECT
).SQL_SMALL_RESULT
в команде SELECT
.EXPLAIN SELECT
для получения описаний объединения таблиц.INDEX
или KEY
в команде CREATE
TABLE (see section 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 section 6.5.4 Синтаксис оператора ALTER TABLE
).RENAME TABLE
. See section 6.5.5 Синтаксис оператора RENAME TABL
E.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 section 6.4.9 Синтаксис оператора LOAD DATA INFILE
).ANALYZE TABLE
, CHECK TABLE
, OPTIMIZE TABLE
и REPAIR TABLE
.SHOW
(see section 4.5.6 Синтаксис команды SHOW
).SET
(see section 5.5.6 Синтаксис команды SET
).GROUP BY
. Это дает лучшую производительность для некоторых очень специфических, но вполне нормальных запросов (see section 6.3.7 Функции, используемые в операторах GROUP BY
).ASC
и DESC
с GROUP BY
.||
и &&
для обозначения логических ИЛИ (OR
) и И (AND
), как это принято в языке программирования C. В сервере MySQL ||
и ИЛИ (OR
) являются синонимами, так же, как &&
и И (AND
). Благодаря этому удобному синтаксису, в сервере MySQL не поддерживается оператор ANSI SQL ||
для конкатенации строк: вместо него используется функция CONCAT()
. Поскольку функция CONCAT()
принимает любое количество аргументов, то в сервере MySQL можно легко модифицировать использование оператора ||
.CREATE DATABASE
или DROP DATABASE
(see section 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 section 8.4.3.126 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 section 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;
1.9.2 Запуск MySQL в режиме ANSI | Оглавление | 1.9.4 Отличия MySQL от ANSI SQL92 |