В MySQL используются пять видов идентификаторов — базы данных, таблицы, столбцы, индексы, и псевдонимы.
Базы данных в MySQL отображают базовые файловые структуры, а таблицы — файлы. Это прямым образом влияет на присваиваемые им имена, а также на чувствительность этих имен к регистру — если в установленной операционной системе (ОС) имена файлов и каталогов чувствительны к регистру, то и базы данных и таблицы не останутся к нему равнодушными (как, например, в UNIX), иначе — нет (Windows). Имена столбцов и псевдонимы к регистру не чувствительны, однако нельзя в одном и том же SQL-операторе использовать версии с различными регистрами.
К слову, расположение каталогов и файлов, содержащих данные, будет таким, каким оно установлено в конфигурации. Проверить их расположение можно с помощью улиты mysqladmin:
mysqladmin variables
В полученном выводе найдете переменную datadir.
Краткий список возможных идентификаторов приведен в табл. Единственное дополнительное исключение — в идентификаторах нельзя использовать ASCII(O) и ASCII(255) или символы кавычки (честно говоря, трудно даже предположить, для чего они могли бы пригодиться).
Таблица. Идентификаторы MySQL
Тип | Макс. длина | Чувствительность к регистру | Допустимые символы |
База данных | 64 | так же, как в ОС | Все символы, допустимые в именах каталогов ОС, за исключением символа /, \ и . (точка) |
Таблица | 64 | так же, как в ОС | Все символы, допустимые в именах каталогов ОС, за исключением символа /, и . (точка) |
Столбец | 64 | нет | Все |
Индекс | 64 | нет | Все |
Псевдоним | 255 | нет | Все |
Эти правила являются предельно открытыми.
Начиная с версии MySQL 3.23.6 в идентификаторах можно даже использовать зарезервированные слова и специальные символы всех видов; единственное ограничение — если вы все же применяете всякого рода странности, то их необходимо заключать в обратные кавычки (на большинстве клавиатур они находятся на клавише с тильдой (~) в верхнем левом углу). Например:
create database 'create database` ;
В предыдущих версиях MySQL (до 3.23.6) ограничений больше, и там такого делать нельзя. Однако какой бы ни была свобода ваших действий, не стоит забывать о здравом смысле. То, что вы можете назвать базу данных 'create database', вовсе не означает, что вы так и должны делать. Здесь, как и в любой другой области программирования, в основе лежит один принцип — идентификаторы должны быть значимыми.
В MySQL определены три базовых типа столбцов: числовой, дата и время и строчный. Каждая из этих категорий подразделяется на множество типов.
Каждый из трех типов обладает различной емкостью. Выбирая тип столбца, главное — выбрать наименьший, в котором помещаются данные.
У большинства типов данных при создании столбца выбранного типа можно указывать максимальную ширину отображения. В приведенных ниже таблицах для типов данных этот параметр обозначается как М. Если для выбранного типа он не обязателен, его приводят в квадратных скобках. Максимальным значением М является 255.
Необязательные значения во всех описаниях заключены в квадратные скобки.
Числовые типы представляют собой либо целые числа, либо числа с плавающей запятой. Для чисел с плавающей запятой можно указывать количество цифр после десятичной точки. В нашей книге этот параметр обозначен как D. Максимальное значение, которое можно выбрать для D составляет 30, или М - 2 (т.е. максимальная ширина отображения минус два — один символ для десятичной точки и второй для целой части числа), смотря что окажется меньшим.
Целый тип может также быть UNSIGNED.
Всем числовым типам можно присвоить атрибут ZEROFILL. Такие значения будут отображаться на экране с ведущими нулями.
Целочисленные типы показаны в табл. Обратите внимание, что диапазоны приводятся как для чисел со знаком, так и для беззнаковых чисел (в двух строках).
Таблица. Целочисленные типы данных
Тип | Диапазон | Память (байт) | Описание |
TINYINT [ (M) ] | -127 ... 128 или 0 ... 255 | 1 | Очень маленькие целые числа |
BIT | 1 | Синониум TINYINT | |
BOOL | 1 | Синониум TINYINT | |
SMALLINT [ (M) ] | -32768 ... 32767 или 0 ... 65535 |
2 | Маленькие целые числа |
MEDIUMINT [ (M) ] | -8388608 ... 8388607 или 0 ... 16777215 |
3 | Целые числа средней величины |
INT [ (M) ] | -231 ... 231 - 1 или 0 ... 232 - 1 |
4 | Обычные целые числа |
INTEGER [ (M) ] | Синониум INT | ||
BIGINT [ (M) ] | -263 ... 263 - 1 или 0 ... 64 - 1 |
8 | Большие целые числа |
Типы данных с плавающей запятой перечислены в таблице.
Таблица. Типы данных с плавающей запятой
Тип | Диапазон | Память (байт) | Описание |
FLOAT (точность) | Зависит от точности | различная | Может использоваться для определения чисел с плавающей точкой одинарной или двойной точности. |
FLOAT [ (M, D) ] | ±1.175494351E - 38 ±3.402823466E + 38 |
4 | Числа с плавающей точкой одинарной точности. Эквивалентно FLOAT [4], но только с указанной шириной отображения и количеством десятичных разрядов. |
DOUBLE [ (M, D) ] | ±1.7976931348623157E + 308 ±2.2250738585072014E - 308 |
8 | Числа с плавающей точкой двойной точности. Эквивалентно FLOAT [8], но только с указанной шириной отображения и количеством десятичных разрядов. |
DOUBLE PRECISION [ (M,D) ] |
±1.7976931348623157E + 308 ±2.2250738585072014E - 308 |
8 | Синониум DOUBLE [ (M, D) ] |
REAL [ (M,D) ] | ±1.7976931348623157E + 308 ±2.2250738585072014E - 308 |
8 | Синониум DOUBLE [ (M, D) ] |
DECIMAL [ (M,D) ] | различный | М + 2 | Число с плавающей точкой, сохраненное как char. Диапазон зависит от ширины отображения М. |
NUMERIC [ (M,D)] | различный | М + 2 | Синониум DECIMAL |
DEC [ (M,D) ] | различный | М + 2 | Синониум DECIMAL |
FIXED [ (M,D) ] | различный | М + 2 | Синониум DECIMAL |
MySQL поддерживает определенное количество типов даты и времени, которые показаны в табл. С помощью этих типов можно вводить данные либо в строчном, либо в числовом форматах. Нет ничего сложного в установке столбца типа TIMESTAMP в определенной строке равным дате и времени последней операции, выполненной над этой строкой, даже если не делать это вручную. Это предельно полезно для фиксации транзакций.
Таблица. Типы данных даты и времени
Тип | Диапазон | Описание |
DATE | 1000 01-01 9999-12-31 |
Дата. Отображается в виде ГГГГ-ММ-ДД |
TIME | -838:59:59 838:59:59 |
Время. Отображается в виде ЧЧ:ММ:СС. Легко заметить, что диапазон намного шире, чем может когда-либо пригодиться. |
DATETIME | 1000-01-01 00:00:00 9999-12-31 23:59:59 |
Дата и время. Отображается в виде ГГГГ-ММ-ДДЧЧ:ММ:СС |
TIMESTAMP [ (M) ] | 1970-01-01 00:00:00 Какой-то момент в 2037 году |
Метка времени, полезная для формирования отчетов по транзакциям. Формат отображения зависит от значения М. Верхнее значение диапазона зависит от ограничений UNIX |
YEAR [ (2|4) ] | 70-69 (1970-2069) 1901-2155 |
Год. Может быть указан в двух- или четырехсимвольном формате. Для каждого из них, как показано определен свой диапазон |
Таблица. Типы отображения для формата TIMESTAMP
Тип | Формат отображения |
TIMESTAMP | ГГГГММДДЧЧММСС |
TIMESTAMP (14) | ГГГГММДДЧЧММСС |
TIMESTAMP (12) | ГГММДДЧЧММСС |
TIMESTAMP (10) | ГГММДДЧЧММ |
TIMESTAMP (8) | ГГГГММДД |
TIMESTAMP (6) | ГГММДД |
TIMESTAMP (4) | ГГММ |
TIMESTAMP (2) | ГГ |
Строковые типы разделяются на три группы. Первая группа — простые старые строки, которые представляют собой короткие фрагменты текста. Это типы CHAR (символы с фиксированной длиной) и VARCHAR (символы с произвольной длиной). Ширину каждого из них можно регулировать. Столбцы с типом CHAR будут дополняться пробелами до максимальной ширины, независимо от размеров данных, в то время как в столбцах с типом VARCHAR ширина зависит от размеров данных. Следует отметить, что MySQL усекает пробелы в конце текстовых строк у CHAR во время извлечения и у VARCHAR во время сохранения. При работе с этими типами приходится искать компромис между занимаемым объемом памяти и скоростью обработки.
Вторая группа — это типы TEXT и BLOB. Их размеры могут быть разными. Первый тип данных предназначен для более длинных текстовых фрагментов, второй — для двоичных данных. BLOB означает binary large object (большой двоичный объект) и может содержать любые данные, в том числе звуки и изображения.
На практике столбцы TEXT и BLOB одинаковы, за исключением того, что TEXT чувствителен к регистру, a BLOB — нет.
К третьей группе принадлежат два специальных типа SET и ENUM. Тип SET предназначен для того, чтобы определять, что значения в данном столбце принадлежат конкретному набору фиксированных значений. Значения столбца могут содержать несколько значений из набора. В определяемом наборе можно задать вплоть до 64 элементов.
ENUM представляет собой перечисление. Этот тип очень похож на SET, но только столбцы этого типа могут иметь всего лишь одно из фиксированных значений или NULL, а максимальное количество элементов в перечислении составляет — 65535.
Таблица. Обычные строковые типы
Тип | Диапазон | Описание |
[NATIONAL] CHAR (M) [BINARY | ASCII | UNICODE] |
От 1 до 255 символов | Строки фиксированной длины М, где М находится CHAR (M) символов между 1 и 255. Ключевое слово NATIONAL [BINARY] указывает на то, что должен использоваться набор символов, установленный по умолчанию. В MySQL так и происходит по умолчанию, но на это стоит обратить внимание, поскольку данное соглашение — часть стандарта ANSI SQL. Ключевое слово BINARY указывает, что данные должны рассматриваться как зависящие от регистра. По умолчанию данные зависят от регистра. Ключевое слово ASCII указывает, что для данного столбца будет использоваться набор символов latin1, а ключевое слово UNICODE — набор символов usc. |
CHAR | 1 | Синоним CHAR (1) |
[NATIONAL] VARCHAR (M) [BINARY] |
От 1 до 255 символов | То же самое, за исключением того, что данные типа VARCHAR могут иметь произвольную длину. |
Максимальная длина поля TEXT в символах равна максимальному размеру файла в байтах, который может храниться в этом поле.
Таблица. Типы TEXT и BLOB
Тип | Максимальная длина (в символах) | Описание |
TINYBLOB | 28- 1 (255) | Маленькое поле BLOB |
TINYTEXT | 28- 1 (255) | Маленькое поле TEXT |
BLOB | 216- 1 (65 535) | Нормальное поле BLOB |
TEXT | 216- 1 (65 535) | Нормальное поле TEXT |
MEDIUMBLOB | 224- 1 (16 777 215) | Среднее поле BLOB |
MEDIUMTEXT | 224- 1 (16 777 215) | Среднее поле TEXT |
LONGBLOB | 232- 1 (4 294 967 295) | Большое поле BLOB |
LONGTEXT | 232- 1 (4 294 967 295) | Большое поле TEXT |
Таблица. Типы ENUM и SET
Тип | Максимальное количество значений в наборе | Описание |
ENUM ('value1', 'value2', ... ) | 65535 | Столбцы этого типа могут содержать только одно из перечисленных значений либо NULL. |
SET ('value1', 'value2', ... ) | 64 | Столбцы этого типа могут содержать набор определенных значений либо NULL. |