Справочное руководство по MySQL версии 4.1.1-alpha

       

Глава 1.11.1.3 Различия в синтаксисе SQL между mSQL 2.0 и MySQL


Типы столбцов

MySQL

Имеются следующие дополнительные типы (не считая остальных; see section 6.5.3 Синтаксис оператора CREATE TABLE):

  • ENUM - тип для одного набора строк.

  • SET - тип для нескольких наборов строк.

  • BIGINT - тип для 64-битовых целых чисел.

    Кроме того, MySQL поддерживает следующие атрибуты дополнительных типов:

    • UNSIGNED - опция для целочисленных столбцов и столбцов чисел с плавающей запятой.

    • ZEROFILL - опция для целочисленных столбцов.

    • AUTO_INCREMENT - опция для целочисленных столбцов, являющихся первичными ключами. See section 8.4.3.31 mysql_insert_id().

    • DEFAULT - значение для всех столбцов.

      mSQL2



      Типы столбцов в mSQL соответствуют приведенным в таблице типам MySQL:

      Тип в mSQL Соответствующий тип в MySQL CHAR(len) CHAR(len) TEXT(len) TEXT(len). len - максимальная длина. Работает LIKE. INT INT. Со множеством опций! REAL REAL. Или FLOAT. Имеются как 4-битовые, так и 8-битовые варианты. UINT INT UNSIGNED DATE DATE. Использует формат ANSI SQL, а не собственный формат mSQL. TIME TIME MONEY DECIMAL(12,2). Значение с фиксированной точкой и двумя знаками после нее.

      Создание индексов

      MySQL

      Индексы могут указываться во время создания таблицы при помощи оператора CREATE TABLE. mSQL

      Индексы создаются после создания таблицы с помощью операторов CREATE INDEX.

      Вставка уникального идентификатора в таблицу

      MySQL

      Для указания типа столбца достаточно использовать AUTO_INCREMENT. See section 8.4.3.31 mysql_insert_id(). mSQL

      Необходимо создать в таблице SEQUENCE и выбрать столбец _seq.

      Получение уникального идентификатора для строки

      MySQL

      Следует добавить к таблице первичный или уникальный ключ и использовать его. Новое в версии 3.23.11: если ключ PRIMARY или UNIQUE состоит только из одного целочисленного столбца, к нему можно обращаться и как к _rowid. mSQL

      Следует использовать столбец _rowid. Нельзя забывать о том, что _rowid

      может, в зависимости от множества факторов, со временем измениться.

      Получение времени последнего изменения столбца


      MySQL

      Нужно вставить в таблицу столбец TIMESTAMP. Этому столбцу автоматически присваиваются текущая дата и время при вызове операторов INSERT или UPDATE, если ему не присвоить определенного значения или присвоить значение NULL. mSQL

      Следует использовать столбец _timestamp.

      Сравнение значений NULL

      MySQL

      MySQL соответствует стандарту ANSI SQL, поэтому сравнение с NULL

      всегда возвращает результат NULL. mSQL

      В mSQL выражение NULL = NULL имеет значение TRUE. Поэтому при переводе старого кода из mSQL в MySQL =NULL необходимо заменить на IS NULL, а <>NULL - на IS NOT NULL.

      Сравнение строк

      MySQL

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

      Все сравнения строк проводятся с учетом регистра символов в ASCII-порядке сортировки.

      Поиск без учета регистра символов

      MySQL

      LIKE может быть как чувствительным, так и нечувствительным к регистру оператором, в зависимости от столбцов, к которым он применяется. По возможности MySQL использует индексы, если аргумент LIKE не начинается с шаблонного символа. mSQL

      Следует использовать CLIKE.

      Обработка концевых пробелов

      MySQL

      Все пробелы в конце столбцов CHAR и VARCHAR удаляются. Если такое поведение нежелательно, используйте столбцы TEXT. mSQL

      Концевые пробелы сохраняются.

      Операторы WHERE

      MySQL

      MySQL правильно определяет приоритеты действий (AND имеет приоритет перед OR). Заставить MySQL вести себя так, как mSQL, можно при помощи скобок (как можно видеть в соответствующем примере). mSQL

      Все действия производятся слева направо. А это значит, что некоторые логические вычисления, в которых наличествует более трех аргументов, не могут быть выполнены вообще. Кроме того, это означает, что при переносе в MySQL некоторые запросы необходимо менять. Это довольно просто сделать при помощи скобок. Возьмем, к примеру, следующий запрос mSQL:

      mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4;

      Чтобы MySQL вычислил результат этого запроса так же, как это сделал бы mSQL, нужно расставить скобки:

      mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4))));

      Ограничения доступа

      MySQL

      Для хранения привилегий для каждого пользователя, удаленного компьютера и базы имеются соответствующие таблицы. See section 4.2.6 Как работает система привилегий. mSQL

      Имеется файл `mSQL.acl', в котором можно определить привилегии чтения/записи для пользователей.


      Содержание раздела