|
Справочное руководство по MySQL1.9.3 Расширения MySQL к ANSI SQL92
1.9.3 Расширения 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 .
-
Все сравнения строк по умолчанию являются независимыми от регистра
символов с порядком сортировки, заданным текущей кодировкой
(ISO-8859-1 Latin1 по умолчанию). Если вас это не устраивает, то можно
объявить столбцы с атрибутом
BINARY или использовать явное приведение
типов BINARY , в результате чего сравнение будет выполняться в
соответствии с порядком ASCII, используемом на хосте сервера MySQL.
-
Сервер MySQL сопоставляет каждую базу данных с подкаталогом в каталоге
данных MySQL, а таблицы внутри базы данных - с именами файлов в этом
подкаталоге базы данных.
Это правило имеет несколько следствий:
-
В сервере MySQL, работающем под операционными системами с
зависимыми от регистра символов именами файлов (таковыми являются
большинство Unix-систем), имена баз данных и имена таблиц
являются зависимыми от регистра символов (see section 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 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 .
-
Чтобы упростить работу для пользователей, привыкших к иным условиям
среды SQL, в сервере MySQL поддерживаются псевдонимы для многих
функций. Например, для всех строковых функций поддерживается синтаксис
как ANSI SQL, так и ODBC.
-
Сервер MySQL понимает операторы
|| и && для обозначения логических ИЛИ
(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;
|
|