Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Общая информация /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Насколько MySQL соответствует стандартам? - Программирование от RIN.RU
Насколько MySQL соответствует стандартам?



Каким стандартам соответствует MySQL ?


Начальный уровень SQL92. Для ODBC уровни 0-3.51.


Мы стремимся к полной поддержке стандарта ANSI SQL99, но без ущерба для скорости и качества кода.


Запуск MySQL в режиме ANSI


При запуске mysqld с опцией --ansi поведение сервера MySQL изменяется следующим образом:

  • || представляет собой конкатенацию строк вместо ИЛИ (OR).

  • Допускается любое количество пробелов между именем функции и скобкой "(". Это заставляет MySQL интерпретировать все имена функций как зарезервированные слова.

  • """ будет интерпретироваться как символ кавычки идентификатора (как символ кавычки "'" сервера MySQL), а не как символ кавычки строки.

  • REAL будет синонимом для FLOAT, а не для DOUBLE.

  • Уровнем изоляции транзакций по умолчанию является SERIALIZABLE (см. раздел Синтаксис команды SET TRANSACTION).

  • Вы можете использовать столбец/выражение в GROUP BY, которое не перечислено в списке столбцов.


Использование данной опции равносильно применению
--sql mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,SERIALIZE,ONLY_FULL_GROUP_BY.


Расширения MySQL к ANSI SQL92


Сервер MySQL включает в себя ряд расширений, которые могут отсутствовать в других базах данных SQL. Если вы их используете, то следует иметь в виду, что такой код не будет переносимым на другие SQL-серверы. В некоторых случаях можно написать код, включающий расширения MySQL, но, тем не менее, являющийся переносимым, воспользовавшись комментариями вида /*! ... */. В этом случае сервер MySQL будет анализировать и выполнять данный код внутри этого комментария как обычную команду MySQL, в то время как другие SQL-серверы будут игнорировать данное расширение. Например:

SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...




При добавлении номера версии после "!" это выражение будет исполняться только в случае, если номер данной версии MySQL равен указанному номеру или больше:

CREATE /*!32302 TEMPORARY */ TABLE t (a int);




Это означает, что при наличии версии 3.23.02 или выше сервер MySQL будет использовать ключевое слово TEMPORARY.


Ниже приводится перечень расширений MySQL:

  • Типы полей MEDIUMINT, SET, ENUM и различные типы BLOB и TEXT.

  • Атрибуты полей AUTO_INCREMENT, BINARY, NULL, UNSIGNED и ZEROFILL.

  • Все сравнения строк по умолчанию являются независимыми от регистра символов с порядком сортировки, заданным текущей кодировкой (ISO-8859-1 Latin1 по умолчанию). Если вас это не устраивает, то можно объявить столбцы с атрибутом BINARY или использовать явное приведение типов BINARY, в результате чего сравнение будет выполняться в соответствии с порядком ASCII, используемом на хосте сервера MySQL.

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

    • В сервере MySQL, работающем под операционными системами с зависимыми от регистра символов именами файлов (таковыми являются большинство Unix-систем), имена баз данных и имена таблиц являются зависимыми от регистра символов.

    • Имена базы данных, таблицы, индекса, столбца или псевдонимы могут начинаться с цифры (но не должны содержать только цифры).

    • Можно использовать стандартную систему команд выполнения резервного копирования, переименования, перемещения, удаления и копирования таблиц. Например, для переименования таблицы необходимо переименовать соответствующие этой таблице файлы ".MYD", ".MYI" и ".frm".


  • В командах SQL можно обращаться к таблицам из разных баз данных с помощью выражения db_name.tbl_name. В некоторых SQL-серверах
    обеспечивается точно такая же функциональная возможность, но она называется User space. Сервер MySQL не поддерживает табличные пространства (как в выражении: CREATE TABLE ralph.my_table...IN my_tablespace).

  • LIKE разрешается на числовых столбцах.

  • Использование INTO OUTFILE и STRAIGHT_JOIN в команде SELECT.

  • Опция SQL_SMALL_RESULT в команде SELECT.

  • Использование EXPLAIN SELECT для получения описаний объединения таблиц.

  • Использование индексных имен, индексов на префиксах полей, а также INDEX или KEY в команде CREATE TABLE.

  • Использование TEMPORARY или IF NOT EXISTS с CREATE TABLE.

  • Использование COUNT(DISTINCT list), где list представляет собой более чем один элемент.

  • Использование CHANGE col_name, DROP col_name или DROP INDEX, IGNORE или RENAME в команде ALTER TABLE .

  • Использование RENAME TABLE.

  • Использование нескольких выражений ADD, ALTER, DROP или CHANGE в команде ALTER TABLE.

  • Использование DROP TABLE с ключевыми словами IF EXISTS.

  • Возможность удаления нескольких таблиц одной командой DROP TABLE.

  • Условие LIMIT в команде DELETE.

  • Условие DELAYED в командах INSERT и REPLACE.

  • Условие LOW_PRIORITY в командах INSERT, REPLACE, DELETE и UPDATE.

  • Использование LOAD DATA INFILE. Во многих случаях этот синтаксис совместим с применяющимся в Oracle LOAD DATA INFILE

  • Команды ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE и REPAIR TABLE.

  • Команда SHOW.

  • Строки могут быть заключены в кавычки с помощью или """, или """, но не просто """.

  • Использование символа экранирования "\".

  • Команда SET.

  • Нет необходимости называть имена всех выбранных столбцов в части GROUP BY. Это дает лучшую производительность для некоторых очень специфических, но вполне нормальных запросов .

  • Можно указывать ASC и DESC с GROUP BY.

  • Чтобы упростить работу для пользователей, привыкших к иным условиям среды SQL, в сервере MySQL поддерживаются псевдонимы для многих функций. Например, для всех строковых функций поддерживается синтаксис как ANSI SQL, так и ODBC.

  • Сервер MySQL понимает операторы || и && для обозначения логических ИЛИ (OR) и И (AND), как это принято в языке программирования C. В сервере MySQL || и ИЛИ (OR) являются синонимами, так же, как && и И (AND). Благодаря этому удобному синтаксису, в сервере MySQL не поддерживается оператор ANSI SQL || для конкатенации строк: вместо него используется функция CONCAT(). Поскольку функция CONCAT() принимает любое количество аргументов, то в сервере MySQL можно легко модифицировать использование оператора ||.

  • CREATE DATABASE или DROP DATABASE .

  • Оператор % является синонимом для MOD(). Т.е. N % M эквивалентно MOD(N,M). Оператор % поддерживается для программистов на C и для совместимости с PostgreSQL.

  • Операторы =, <>, <=,<, >=,>, <<, >>, <=>, AND, OR или LIKE могут использоваться при сравнении столбцов слева от FROM в командах SELECT.Например:

    mysql> SELECT col1=1 AND col2=2 FROM tbl_name;


  • Функция LAST_INSERT_ID().

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

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

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

  • Использование функции TRIM() для усечения подстрок. В ANSI SQL поддерживается только удаление единичных символов.

  • Операция GROUP BY для функций STD(), BIT_OR() и BIT_AND().

  • Использование REPLACE вместо DELETE + INSERT.

  • Команды FLUSH, RESET и DO.

  • Возможность устанавливать переменные в команде с помощью :=:

    SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table;
    SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;





<<<  НазадВперед  >>>
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Об этом руководстве

Соглашения, используемые в данном руководстве

О русском переводе руководства

Что представляет собой MySQL?

Что представляет собой компания MySQL AB?

Лицензии и поддержка MySQL

Кратко о MySQL 4.x

Источники информации по MySQL

MySQL и будущее (что предстоит сделать)

Сравнение MySQL с другими СУБД

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь