|
Справочное руководство по MySQL1.11.1.3 Различия в синтаксисе SQL между mSQL 2.0 и MySQL
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.126 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.126 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', в котором можно определить привилегии
чтения/записи для пользователей.
|
|