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, «Чувствительность к регистру идентификаторов».
-
Общий синтаксис языка
По умолчанию строки могут быть заключены в
", а также в'. Если включен режим SQLANSI_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для получения описания того, как таблицы обрабатываются оптимизатором запросов.Запрос
SET. См. Раздел 15.7.6.1, «Синтаксис SET для присваивания переменных».Запрос
SHOW. См. Раздел 15.7.7, «Запросы SHOW». Информация, полученная многими специфичными для MySQLSHOWзапросами, может быть получена более стандартным способом с помощьюSELECTдля запросаINFORMATION_SCHEMA. См. Главу 28, Таблицы INFORMATION_SCHEMA.Использование
LOAD DATA. Во многих случаях этот синтаксис совместим с OracleLOAD DATA. См. Раздел 15.2.9, «Запрос LOAD DATA».Использование
RENAME TABLE. См. Раздел 15.1.36, «Запрос RENAME TABLE».Использование
REPLACEвместоDELETEплюсINSERT. См. Раздел 15.2.12, «Запрос REPLACE».Использование
CHANGE,col_nameDROPилиcol_nameDROP 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.Синтаксис
INSERT INTO.tbl_nameSETcol_name= ...Клауза
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, «Пользовательские переменные».
-
Типы данных
-
Функции и операторы
Для упрощения миграции пользователей из других СУБД 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%MMOD(.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 BYSTD(),BIT_OR(),BIT_AND(),BIT_XOR()иGROUP_CONCAT(). См. Раздел 14.19, «Функции агрегирования».
© 2025 Oracle
Licensed under the GPLv2 License.