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и позволить серверу переименовать файлы.)
-
Общая синтаксическая конструкция языка
По умолчанию строки могут быть заключены в
", а также'. Если включен режим 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. См. Раздел 13.1.11, «CREATE DATABASE Statement», Раздел 13.1.22, «DROP DATABASE Statement» и Раздел 13.1.1, «ALTER DATABASE Statement».Запрос
DO.EXPLAIN SELECTдля получения описания обработки таблиц оптимизатором запросов.Запрос
SET. См. Раздел 13.7.4.1, «Синтаксис SET для присваивания переменных».Запрос
SHOW. См. Раздел 13.7.5, «Команды SHOW». Информация, полученная от многих MySQL-специфичных командSHOW, может быть получена более стандартным способом с помощью запросаSELECTк таблицамINFORMATION_SCHEMA. См. Главу 24, Таблицы INFORMATION_SCHEMA.Использование
LOAD DATA. Во многих случаях этот синтаксис совместим с OracleLOAD 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_nameDROPилиcol_nameDROP 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.Синтаксис
INSERT INTO.tbl_nameSETcol_name= ...Оператор
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, «Пользовательские переменные».
-
Типы данных
-
Функции и операторы
Для облегчения миграции пользователей из других 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%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. Смотрите Раздел 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 BYSTD(),BIT_OR(),BIT_AND(),BIT_XOR()иGROUP_CONCAT(). Смотрите Раздел 12.19, «Функции агрегации».
© 2025 Oracle
Licensed under the GPLv2 License.