Сервер 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;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
