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 Statement», Раздел 15.1.25, «DROP DATABASE Statement» и Раздел 15.1.2, «ALTER DATABASE Statement».Запрос
DO.EXPLAIN SELECTдля получения описания обработки таблиц оптимизатором запросов.Запрос
SET. См. Раздел 15.7.6.1, «Синтаксис SET для присваивания переменных».Запрос
SHOW. См. Раздел 15.7.7, «Запросы SHOW». Информацию, получаемую с помощью многих специфичных для MySQL запросовSHOW, можно получить стандартным способом, используяSELECTдля запроса кINFORMATION_SCHEMA. См. Главу 28, Таблицы INFORMATION_SCHEMA.Использование
LOAD DATA. Во многих случаях этот синтаксис совместим с OracleLOAD DATA. См. Раздел 15.2.9, «LOAD DATA Statement».Использование
RENAME TABLE. См. Раздел 15.1.38, «RENAME TABLE Statement».Использование
REPLACEвместоDELETEплюсINSERT. См. Раздел 15.2.12, «REPLACE Statement».Использование
CHANGE,col_nameDROPилиcol_nameDROP INDEX,IGNOREилиRENAMEв запросахALTER TABLE. Использование несколькихADD,ALTER,DROPилиCHANGEв запросеALTER TABLE. См. Раздел 15.1.9, «ALTER TABLE Statement».Использование имён индексов, индексов по префиксу столбца и использования
INDEXилиKEYв запросахCREATE TABLE. См. Раздел 15.1.21, «CREATE TABLE Statement».Использование
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 Statement».Опции, такие как
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.