|
<?php
<html>
<head>
<title>PHP. Шаг за шагом.</title>
<meta content="text/html; charset=Windows-1251" http-equiv=Content-Type>
</head>
<body text=black bgcolor=white link=blue vlink=blue alink=red>
<font color=red><h2 align=center>Шаг 11. Краткий справочник по MySQL. Типы данных.</h2></font>
<p>Прежде чем продолжать разрабатывать наше творение я приведу краткую справку по <b>MySQL</b>, а точнее, коротко опишу типы данных <b>mysql</b>, функции и особенности <b>sql</b>-запросов. Сам <b>sql</b>, я думаю, Вы знаете (если это не так - то к вашим услугам раздел "SQL by step" на "Первых шагах"! ;)
<p>Я не буду описывать подробно все изобилие типов <b>MySQL</b>. Я уверен, что это лишнее. Дело в том, что в <b>mysql</b>-е числовые и текстовые группы типов очень многочисленны. Отличаются типы в этих группах размером в байтах и возможными модификаторами. Подробности можно посмотреть в мануале в директории <b>Docs</b> каталога с <b>mysql</b>-ем в разделе "<b>7.3 Column types</b>". Там и английский знать особо не нужно - смотрите на название и цифры длины! ;)
<p>Здесь я сделаю обзор самих групп типов данных - для быстрого введение.
<p>MySQL поддерживает следующие типы/группы типов данных:
<ol>
<li>Числовые. Возможные модификаторы: <b>UNSIGNED</b> для объявления беззнаковости, <b>ZEROFILL</b> для заполнения лидирующих пробелов нулями (имеется в виду внешний вид при выводе). Могут быть созданы как целые (<b>TINYINT</b>, <b>SMALLINT</b>, <b>INT</b>, <b>BIGINT</b> и пр.), так и числа с плавающей точкой (<b>FLOAT</b>, <b>DOUBLE</b>, <b>REAL</b> и пр.).
<li>Строковые. Возможные модификаторы: <b>BINARY</b> для объявления поля как бинарного (любые коды хранимых символов), <b>NATIONAL</b> - модификатор по умолчанию, - использование набора символов для сортировки, сравнения и пр. Занятный модификатор. Отвечает за конструкцию <b>SET</b>-группы: <b>SET CHARACTER SET character_set_name | DEFAULT</b>, где <b>character_set_name</b> может принимать значение <b>cp1251_koi8</b>. <p>Однако эти установки выставлены по умолчанию. Выходит, без модификатора результат тот же, что и с ним. Я так понял, что эти фишки для будущего использования. Модификатор для типа <b>CHAR VARYING</b> создает строковое поле переменной длины.
<li><b>BLOB</b>-поля - поля для хранения двоичных данных.
</ol>
Типы данных, не попавшие в предыдущие три группы:
<ol start=4>
<li><b>TIMESTAMP</b> - поле хранит дату и время последнего изменения записи. Это значит, что, добавив в таблицу поле типа <b>TIMESTAMP</b> (например, воспользовавшись конструкцией <b>ALTER TABLE table_name ADD COLUMN column_name TIMESTAMP</b>), Вы, не производя никаких изменений поля типа <b>TIMESTAMP</b>, будете в нем иметь время последней операции с записью, влияющей на содержимое строки таблицы.
<li><b>DATE</b>, <b>TIME</b>, <b>DATETIME</b> - поля хранения даты, времени, и того, и другого. Тут, я думаю все ясно.
<li><b>YEAR</b> - поле, добавленное в версии 3.22, - для хранения года в интервале с 1901 по 2155.
<li><b>ENUM</b> - поле, хранящее одно из значений, указанных в списке при создании (модификации структуры)
таблицы, например, <b>ALTER TABLE tab_name ADD COLUMN col_enum ENUM('Ага', 'Угу', 'Ну его нафиг')</b>.
Теперь поместить в поле <b>col_enum</b> одно из перечисленных значений можно так:
<pre>
INSERT INTO tab_name SET col_enum='Ага'
или
UPDATE tab_name SET col_enum=3.
</pre>
В последнем случае в <b>col_enum</b> будет значение <b>'Ну его нафиг'</b>. Присвоение полю значения не из списка (например, <b>col_enum=7</b> или <b>col_enum='format c:'</b>) запишет в поле пустую строку (даже не '<b>NULL</b>').
<li>тип <b>SET</b> в отличии от типа <b>ENUM</b> предназначен для хранения списка значений, например,
<pre>
ALTER TABLE tab_name ADD COLUMN col_set SET ('один','два','три','четыре')
</pre>
Теперь изменим значение поля:
<pre>
UPDATE tab_name SET col_set='один' WHERE поле=значение
</pre>
После такого запроса <b>col_set</b> будет содержать значение 'один'.
<pre>
UPDATE tab_name SET col_set=15
</pre>
Здесь <b>col_set</b> содержит значение 'один,два,три,четыре'. Да, именно
строку с <b>set</b>-значениями, разделенными запятыми. Цифра <b>15</b> - это двоичное <b>1111</b>. Каждый бит отвечает за свое значение в списке. Например: 1 - 'del', 10 - 'file1.txt', 11 - 'del,file1.txt' и т.д. Как и в случае с <b>ENUM</b> установка недопустимого значения записывает в поле пустую строку.
</ol>
В следующем шаге - краткий обзор функций <b>MySQL</b>, используемых в <b>SELECT</b>-запросах и в условиях <b>WHERE</b>. Подробностями самого <b>SELECT</b>-а мы займемся несколько позже, когда в целом реализуем первый проект - книжную базу.
<hr>
<center><font size=2><a href=php10.html>Предыдущий Шаг</a></font></center>
<hr><center><font size=2>By <a href="mailto:kgp@nm.ru?SUBJECT=FromPHPByStep">Konstantin Platonov</a>.</center>
</body>
</html>
?>