Spec-Zone.ru › MySQL 5.7

1.6.1 Расширения MySQL по стандарту SQL

Сервер MySQL поддерживает некоторые расширения, которые, вероятно, отсутствуют в других СУБД SQL. Будьте осторожны, так как при их использовании ваш код не будет переносимым на другие серверы SQL. В некоторых случаях вы можете написать код, включающий расширения MySQL, но при этом сохраняющий переносимость, используя комментарии следующего формата:

/*! MySQL-specific code */

В этом случае сервер MySQL парсит и выполняет код внутри комментария, как любой другой SQL-запрос, но другие серверы SQL игнорируют расширения. Например, сервер MySQL распознает ключевое слово STRAIGHT_JOIN в следующем операторе, но другие серверы — нет:

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

Если вы добавите номер версии после символа !, синтаксис внутри комментария выполняется только в том случае, если версия MySQL больше или равна указанному номеру версии. Оператор KEY_BLOCK_SIZE в следующем комментарии выполняется только серверами MySQL 5.1.10 и выше:

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

В следующих описаниях перечислены расширения MySQL, организованные по категориям.

  • Организация данных на диске

    MySQL Server сопоставляет каждую базу данных с каталогом в каталоге данных MySQL, а таблицы внутри базы данных — с именами файлов в каталоге базы данных. Это влечет за собой несколько последствий:

    • Имена баз данных и таблиц в MySQL Server чувствительны к регистру в операционных системах с чувствительными к регистру именами файлов (например, большинство Unix-систем). См. Раздел 9.2.3, «Чувствительность к регистру идентификаторов».

    • Вы можете использовать стандартные системные команды для резервного копирования, переименования, перемещения, удаления и копирования таблиц, управляемых хранилищем MyISAM. Например, можно переименовать таблицу MyISAM, переименовав файлы .MYD, .MYI и .frm, которым соответствует эта таблица. (Тем не менее, предпочтительнее использовать RENAME TABLE или ALTER TABLE ... RENAME и позволить серверу переименовать файлы.)

  • Общая синтаксическая конструкция языка

    • По умолчанию строки могут быть заключены в ", а также '. Если включен режим SQL ANSI_QUOTES, строки могут быть заключены только в ', а сервер интерпретирует строки, заключенные в ", как идентификаторы.

    • \ — это управляющий символ в строках.

    • В SQL-запросах вы можете получить доступ к таблицам из разных баз данных с помощью синтаксиса db_name.tbl_name. Некоторые SQL-серверы обеспечивают такую же функциональность, но называют это User space. MySQL Server не поддерживает пространства таблиц, как в таких операциях: CREATE TABLE ralph.my_table ... IN my_tablespace.

  • Синтаксис SQL-запросов

    • Запросы ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE и REPAIR TABLE.

    • Запросы CREATE DATABASE, DROP DATABASE и ALTER DATABASE. См. Раздел 13.1.11, «CREATE DATABASE Statement», Раздел 13.1.22, «DROP DATABASE Statement» и Раздел 13.1.1, «ALTER DATABASE Statement».

    • Запрос DO.

    • EXPLAIN SELECT для получения описания обработки таблиц оптимизатором запросов.

    • Запросы FLUSH и RESET.

    • Запрос SET. См. Раздел 13.7.4.1, «Синтаксис SET для присваивания переменных».

    • Запрос SHOW. См. Раздел 13.7.5, «Команды SHOW». Информация, полученная от многих MySQL-специфичных команд SHOW, может быть получена более стандартным способом с помощью запроса SELECT к таблицам INFORMATION_SCHEMA. См. Главу 24, Таблицы INFORMATION_SCHEMA.

    • Использование LOAD DATA. Во многих случаях этот синтаксис совместим с Oracle LOAD DATA. См. Раздел 13.2.6, «LOAD DATA Statement».

    • Использование RENAME TABLE. См. Раздел 13.1.33, «RENAME TABLE Statement».

    • Использование REPLACE вместо DELETE плюс INSERT. См. Раздел 13.2.8, «REPLACE Statement».

    • Использование CHANGE col_name, DROP col_name или DROP INDEX, IGNORE или RENAME в операциях ALTER TABLE. Использование нескольких ADD, ALTER, DROP или CHANGE в операциях ALTER TABLE. См. Раздел 13.1.8, «ALTER TABLE Statement».

    • Использование имён индексов, индексов по префиксу столбца и использование INDEX или KEY в операциях CREATE TABLE. См. Раздел 13.1.18, «CREATE TABLE Statement».

    • Использование TEMPORARY или IF NOT EXISTS с CREATE TABLE.

    • Использование IF EXISTS с DROP TABLE и DROP DATABASE.

    • Возможность удаления нескольких таблиц с помощью одной команды DROP TABLE.

    • Операторы ORDER BY и LIMIT операторов UPDATE и DELETE.

    • Синтаксис INSERT INTO tbl_name SET col_name = ....

    • Оператор DELAYED операторов INSERT и REPLACE.

    • Оператор LOW_PRIORITY операторов INSERT, REPLACE, DELETE и UPDATE.

    • Использование INTO OUTFILE или INTO DUMPFILE в запросах SELECT. См. Раздел 13.2.9, «SELECT Statement».

    • Опции, такие как STRAIGHT_JOIN или SQL_SMALL_RESULT, в запросах SELECT.

    • Вам не нужно указывать все выбранные столбцы в операторе GROUP BY. Это улучшает производительность некоторых очень специфичных, но вполне обычных запросов. См. Раздел 12.19, «Функции агрегирования».

    • Вы можете указать ASC и DESC с помощью GROUP BY, а не только с помощью ORDER BY.

    • Возможность задания переменных в запросе с оператором присваивания :=. См. Раздел 9.4, «Пользовательские переменные».

  • Типы данных

    • Типы данных MEDIUMINT, SET и ENUM, а также различные типы данных BLOB и TEXT.

    • Атрибуты типов данных AUTO_INCREMENT, BINARY, NULL, UNSIGNED и ZEROFILL.

  • Функции и операторы

    • Для облегчения миграции пользователей из других SQL-среды MySQL Server поддерживает псевдонимы для многих функций. Например, все строковые функции поддерживают как стандартный синтаксис SQL, так и синтаксис ODBC.

    • MySQL Server понимает операторы || и && как логическое ИЛИ и И, соответственно, как в языке программирования C. В MySQL Server, || и OR являются синонимами, так же как и && и AND. Благодаря этому синтаксису, MySQL Server не поддерживает стандартный SQL оператор || для конкатенации строк; используйте CONCAT() вместо него. Поскольку CONCAT() принимает любое количество аргументов, легко преобразовать использование оператора || в MySQL Server.

    • Используйте COUNT(DISTINCT value_list) там, где value_list имеет более одного элемента.

    • Сравнение строк по умолчанию нечувствительно к регистру, а порядок сортировки определяется кодировкой текущего набора символов, который по умолчанию является latin1 (cp1252 Западная Европа). Для выполнения сравнений, чувствительных к регистру, необходимо объявить столбцы с атрибутом BINARY или использовать преобразование BINARY, что приводит к сравнениям с использованием кодовых значений символов, а не лексического порядка.

    • Оператор % является синонимом для MOD(). То есть, N % M эквивалентно MOD(N,M). % поддерживается для программистов на C и для совместимости с PostgreSQL.

    • Операторы =, <>, <=, <, >=, >, <<, >>, <=>, AND, OR или LIKE могут быть использованы в выражениях в списке выходных столбцов (слева от FROM) в операторах SELECT. Например:

      mysql> SELECT col1=1 AND col2=2 FROM my_table;
      
    • Функция LAST_INSERT_ID() возвращает последнее значение AUTO_INCREMENT. Смотрите Раздел 12.15, «Функции информации».

    • LIKE разрешено для числовых значений.

    • Расширенные операторы регулярных выражений REGEXP и NOT REGEXP.

    • CONCAT() или CHAR() с одним аргументом или более чем двумя аргументами. (В MySQL Server эти функции могут принимать переменное число аргументов.)

    • Функции BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), MD5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS() и WEEKDAY().

    • Используйте функцию TRIM() для обрезки подстрок. Стандартный SQL поддерживает удаление только отдельных символов.

    • Функции GROUP BY STD(), BIT_OR(), BIT_AND(), BIT_XOR() и GROUP_CONCAT(). Смотрите Раздел 12.19, «Функции агрегации».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/extensions-to-ansi.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API