Spec-Zone.ru › MySQL 8.4

1.7.1 Расширения MySQL для стандартного SQL

Сервер MySQL поддерживает некоторые расширения, которых вы, скорее всего, не найдете в других SQL DBMS. Будьте осторожны, так как если вы их используете, ваш код, скорее всего, не будет переносимым на другие 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-систем). См. Раздел 11.2.3, «Чувствительность к регистру идентификаторов».

  • Общий синтаксис языка

    • По умолчанию строки могут быть заключены в ", а также в '. Если включен режим 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. См. Раздел 15.1.12, «Запрос CREATE DATABASE», Раздел 15.1.24, «Запрос DROP DATABASE» и Раздел 15.1.2, «Запрос ALTER DATABASE».

    • Запрос DO.

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

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

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

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

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

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

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

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

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

    • Использование 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. См. Раздел 15.2.13, «Запрос SELECT».

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

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

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

    • Возможность задания переменных в запросе с помощью оператора присваивания :=. См. Раздел 11.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 содержит более одного элемента.

    • Сравнение строк по умолчанию выполняется без учета регистра, порядок сортировки определяется кодировкой текущего набора символов, которая равна utf8mb4 по умолчанию. Для выполнения сравнения с учетом регистра, необходимо объявить столбцы с атрибутом 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. См. Раздел 14.15, «Функции информации».

    • LIKE разрешено использовать с числовыми значениями.

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

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

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

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

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

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

Spec-Zone.ru

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