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 |