Поиск

Отличия MySQL от стандартного SQL

В состав сервера MySQL входит ряд расширений, которых, возможно, вы не найдете в других базах данных SQL. Помните, что если вы используете их, ваш код перестанет быть переносимым на другие серверы SQL. В некоторых случаях вы можете писать код, включающий расширения MySQL, но остающийся переносимым, используя для этого форму комментариев /*! ... */. В этом случае сервер MySQL разбирает и выполняет код внутри комментария, как и любые другие SQL-операторы, а все другие серверы SQL расширение проигнорируют. Например: SELECT /*! STRAIGHT_JOIN */ имя_столбцаFROM таблица1, таблица2 WHERE ... Если после символа '!' добавить номер версии, синтаксис внутри комментария будет выполняться только сервером MySQL указанной и более поздних версий: CREATE /*132302 TEMPORARY */ TABLE t (a INT); Это означает, что если работа выполняется в версии MySQL 3.23.02 или более позд­ней, то ключевое слово TEMPORARY будет использовано. В приведенном ниже списке описаны расширения MySQL по категориям.

  • Организация данных на диске.
Сервер MySQL отображает каждую базу данных на подкаталог внутри каталога данных MySQL, а таблицы внутри базы - на имена файлов в этом каталоге. От­сюда вытекает несколько следствий:

  1. Имена баз данных и таблиц MySQL зависят от регистра в средах операцион­ ных систем, в которых имена файлов чувствительны к регистру символов (большинство Unix-систем).
  2. Можно использовать стандартные системные команды для резервного копиро­ вания, переименования, перемещения, удаления и копирования таблиц, управляемых механизмами хранения My ISAM или ISAM.
Например, чтобы переименовать таблицу MylSAM, потребуется переименовать файлы .MYD, .MYI и . frra, ко­торые относятся к таблице. Имена баз данных, таблиц, индексов, столбцов и псевдонимы могут начинаться с цифры (но не должны состоять только из цифр).
  • Общий синтаксис языка.

  1. Строки могут ограничиваться и одиночными и двойными кавычками.
  2. Символ 'V используется в строках как управляющий.
  3. Внутри SQL-операторов можно получать доступ к таблицам из разных баз дан­ ных посредством синтаксиса имя_ базы_ да нных. имя таблицы. Некоторые серверы SQL предоставляют ту же функциональность, но называют ее пространством пользователя (User space). Сервер MySQL не поддерживает табличных про­ странств, как в следующем операторе: CREATE TABLE ralph.my_table.. .IN my_tablespace.

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

  1. Операторы ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE И REPAIR TABLE.
  2. Операторы CREATE DATABASE И DROP DATABASE.
  3. Оператор DO.
  4. EXPLAIN SELECT - для получения описания способа объединения таблиц в за­ просе.
  5. Операторы FLUSH и RESET.
  6. Оператор SET.
  7. Оператор show.
  8. LOAD DATA INFILE. Во многих случаях этот синтаксис совместим с аналогич­ ным синтаксисом Oracle.
  9. RENAME TABLE.
  10. REPLACE вместо DELETE + INSERT.
  11. Конструкции CHANGE имя_столбца, DROP имя_столбца, DROP INDEX, IGNORE и RENAME в операторе ALTER TABLE. Использование множественных конструкций ADD, ALTER, DROP И CHANGE в операторе ALTER TABLE.
  12. Использование имен индексов, индексов в префиксах полей, а также конст­ рукций INDEX ИЛИ KEY В операторе CREATE TABLE.
  13. Использование IF EXISTS вместе с DROP TABLE.
  14. Можно удалять несколько таблиц одним оператором DROP TABLE.
  15. Конструкции ORDER BY и LIMIT В операторах UPDATE И DELETE.
  16. Синтаксис INSERT INTO...SET имя_столбца = ....
  17. Конструкция DELAYED в операторах INSERT и REPLACE.
  18. Конструкция LOW_PRIORITY В операторах INSERT, REPLACE, DELETE И UPDATE.
  19. Использование INTO OUTFILE и STRAIGHT_JOIN в операторе SELECT.
  20. ОПЦИЯ SQL_SMALL_RESULT оператора SELECT.
Нет необходимости перечислять все выбранные столбцы в конструкции GROUP BY. Это обеспечивает лучшую производительность для некоторых очень спе­ цифических, но вполне нормальных запросов.
  • Можно применять ASC или DESC вместе с GROUP BY.
  • Имеется возможность присваивать значения переменным с помощью операции присваивания := в операторах:
  • mysql; SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg -; FROM test_table; mysql; SELECT @tl:=(@t2:=l)+@t3:=4,@tl,@t2,@t3; мТипы столбцов. • Типы столбцов mediumint, set, enum и различные варианты типов blob и text. • Атрибуты столбцов AUTO_INCREMENT, BINARY, NULL, UNSIGNED И ZEROFILL.

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

    1. Чтобы облегчить жизнь пользователям, привыкшим к другим SQL-средам, сервер MySQL поддерживает псевдонимы для многих функций. Например, все строковые функции поддерживают как стандартный синтаксис SQL, так и син­ таксис ODBC.
    2. Сервер MySQL воспринимает операции и | | как логическое И (AND) и логическое ИЛИ (OR), по аналогии с языком программирования С. В кон­ тексте сервера MySQL операции | | и OR являются синонимами, равно как и и AND. По этой причине MySQL не поддерживает стандартную SQL-операцию | | для конкатенации строк. Вместо этого необходимо применять функцию CONCAT (). Поскольку CONCAT () принимает любое количество аргументов, пре­ образовать все операции | | очень легко.
    3. Использование COUNT(DISTINCT список), где список содержит более одного элемента.
    4. Все сравнения строк по умолчанию чувствительны к регистру, а порядок сор­ тировки определяется текущим выбранным набором символов (по умолчанию ISO-8859-1 Latinl). Если это не подходит, потребуется объявить столбец с ат­ рибутом BINARY либо воспользоваться приведением к BINARY, что заставит вы­ полнять сравнение и сортировку в соответствии с кодами символов, а не в лек­ сикографическом порядке.
    5. Операция % является синонимом функции MOD (). То есть, выражение N % м эквивалентно MOD (N, м). '%' поддерживается для удобства программистов на языке С и достижения совместимости с СУБД PostgresSQL.
    6. Операции =, о,=,, ;=, ;, «, »,=;, AND, OR и LIKE могут применяться для сравнения столбцов слева от конструкции from в операторах SELECT, например: mysql; SELECT col1=1 AND col2=2 FROM имя таблицы;
    7. Функция LAST_INSERT_ID () возвращает самое последнее значение AUTO_INCREMENT.
    8. LIKE можно применять к числовым столбцам.
    9. Расширенные операции обработки регулярных выражений REGEXP и NOT REGEXP.
    1. Функции C0NCAT () и CHAR () принимают один и более аргументов.
    2. Функции BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD!), ENCRYPT (),MD5(), ENCODE(), DECODE (), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS () И WEEKDAY !).
    3. Применение TRIMO для усечения подстрок. Стандартный язык SQL поддер­ живает только удаление последовательностей одинаковых символов.
    4. Возможность в конструкции GROUP BY обращаться к функциям STD (), BIT__OR(),BIT_AND(),BIT_XOR() И GROUP_CONCAT().

    Для ознакомления с перечнем новых расширений, которые планируется добавить в сервер MySQL, а также с их приоритетностью, просмотрите список TODO по адресу http://dev.mysql.com/doc/mysql/en/TODO.html. В настоящем руководстве представле­на последняя на данный момент версия списка TODO. См. также раздел MySQL и будущее (списки TODO).