## Шаг 11. Краткий справочник по MySQL. Типы данных.

Прежде чем продолжать разрабатывать наше творение я приведу краткую справку по MySQL, а точнее, коротко опишу типы данных mysql, функции и особенности sql-запросов. Сам sql, я думаю, Вы знаете (если это не так - то к вашим услугам раздел "SQL by step" на "Первых шагах"! ;)

Я не буду описывать подробно все изобилие типов MySQL. Я уверен, что это лишнее. Дело в том, что в mysql-е числовые и текстовые группы типов очень многочисленны. Отличаются типы в этих группах размером в байтах и возможными модификаторами. Подробности можно посмотреть в мануале в директории Docs каталога с mysql-ем в разделе "7.3 Column types". Там и английский знать особо не нужно - смотрите на название и цифры длины! ;)

Здесь я сделаю обзор самих групп типов данных - для быстрого введение.

MySQL поддерживает следующие типы/группы типов данных:

1. Числовые. Возможные модификаторы: UNSIGNED для объявления беззнаковости, ZEROFILL для заполнения лидирующих пробелов нулями (имеется в виду внешний вид при выводе). Могут быть созданы как целые (TINYINT, SMALLINT, INT, BIGINT и пр.), так и числа с плавающей точкой (FLOAT, DOUBLE, REAL и пр.).
2. Строковые. Возможные модификаторы: BINARY для объявления поля как бинарного (любые коды хранимых символов), NATIONAL - модификатор по умолчанию, - использование набора символов для сортировки, сравнения и пр. Занятный модификатор. Отвечает за конструкцию SET-группы: SET CHARACTER SET character_set_name | DEFAULT, где character_set_name может принимать значение cp1251_koi8.

   Однако эти установки выставлены по умолчанию. Выходит, без модификатора результат тот же, что и с ним. Я так понял, что эти фишки для будущего использования. Модификатор для типа CHAR VARYING создает строковое поле переменной длины.

3. BLOB-поля - поля для хранения двоичных данных.

Типы данных, не попавшие в предыдущие три группы:

4. TIMESTAMP - поле хранит дату и время последнего изменения записи. Это значит, что, добавив в таблицу поле типа TIMESTAMP (например, воспользовавшись конструкцией ALTER TABLE table_name ADD COLUMN column_name TIMESTAMP), Вы, не производя никаких изменений поля типа TIMESTAMP, будете в нем иметь время последней операции с записью, влияющей на содержимое строки таблицы.
5. DATE, TIME, DATETIME - поля хранения даты, времени, и того, и другого. Тут, я думаю все ясно.
6. YEAR - поле, добавленное в версии 3.22, - для хранения года в интервале с 1901 по 2155.
7. ENUM - поле, хранящее одно из значений, указанных в списке при создании (модификации структуры) таблицы, например, ALTER TABLE tab_name ADD COLUMN col_enum ENUM('Ага', 'Угу', 'Ну его нафиг'). Теперь поместить в поле col_enum одно из перечисленных значений можно так:

       INSERT INTO tab_name SET col_enum='Ага'
        или
       UPDATE tab_name SET col_enum=3.

   В последнем случае в col_enum будет значение 'Ну его нафиг'. Присвоение полю значения не из списка (например, col_enum=7 или col_enum='format c:') запишет в поле пустую строку (даже не 'NULL').
8. тип SET в отличии от типа ENUM предназначен для хранения списка значений, например,

       ALTER TABLE tab_name ADD COLUMN col_set SET ('один','два','три','четыре')

   Теперь изменим значение поля:

       UPDATE tab_name SET col_set='один' WHERE поле=значение

   После такого запроса col_set будет содержать значение 'один'.

       UPDATE tab_name SET col_set=15

   Здесь col_set содержит значение 'один,два,три,четыре'. Да, именно строку с set-значениями, разделенными запятыми. Цифра 15 - это двоичное 1111. Каждый бит отвечает за свое значение в списке. Например: 1 - 'del', 10 - 'file1.txt', 11 - 'del,file1.txt' и т.д. Как и в случае с ENUM установка недопустимого значения записывает в поле пустую строку.

В следующем шаге - краткий обзор функций MySQL, используемых в SELECT-запросах и в условиях WHERE. Подробностями самого SELECT-а мы займемся несколько позже, когда в целом реализуем первый проект - книжную базу.

Предыдущий Шаг

By Konstantin Platonov.