Таблица и ее создание в базе данных MySQL
Для этого используем ранее рассмотренную функцию подключения к базе данных.
db_connect($serverMySql,$db_log,$db_pass);
mysql_select_db($database);
mysql_query("CREATE TABLE ИмяТаблицы(ИмяПоля тип,ИмяПоля тип)") or die(mysql_error());
Этой командой в базе данных создается новая таблица с колонками (полями), определяемыми своими именами (ИмяПоля) и указанными типами.
Типы полей
Тип | Описание |
---|---|
TINYINT | Может хранить числа от –128 до +127 |
SMALLINT | Диапазон от –32768 до 32767 |
MEDIUMINT | Диапазон от –8388608 до 8388607 |
INT | Диапазон от –2147483648 до 2147483647 |
BIGINT | Диапазон от –9223372036854775808 до 922337203685477580 |
Дробные числа
Точно так же, как целые числа подразделяются в MySQL на несколько разновидностей, MySQL поддерживает и несколько типов дробных чисел.
В общем виде они записываются так:
ИмяТипа[(length,decimals)][UNSIGNED]
Здесь length - количество знакомест (ширина поля), в которых будет размещено дробное число при его передаче в PHP, а decimals - количество знаков после десятичной точки, которые будут учитываться. Как обычно, UNSIGNED задает беззнаковые числа. Строка ИмяТипа замещается на предопределенные значения, соответствующие возможным вариантам представления вещественных чисел
Тип | Описание |
---|---|
FLOAT | Число с плавающей точкой небольшой точности |
DOUBLE | Число с плавающей точкой двойной точности |
REAL | Синоним для DOUBLE |
DECIMAL | Дробное число, хранящееся в виде строки |
NUMERIC | Синоним для DECIMAL |
Строки
Для начала давайте ознакомимся с типом строки, которая может хранить не более length символов, где length принадлежит диапазону от 1 до 255.
VARCHAR(length)[BINARY]
При занесении некоторого значения в поле такого типа из него автоматически вырезаются концевые пробелы (как будто по вызову функции rtrim()). Если указан флаг BINARY, то при запросе SELECT строка будет сравниваться с учетом регистра. Тип VARCHAR неудобен тем, что может хранить не более 255 символов. Рассмотрим другие, более удобные типы
Тип | Описание |
---|---|
TINYTEXT | Может хранить максимум 255 символов |
TEXT | Может хранить не более 65535 символов |
MEDIUMTEXT | Может хранить максимум 16777215 символов |
LONGTEXT | Может хранить 4294967295 символов |
Бинарные данные
Бинарные данные - это почти то же самое, что и данные в формате TEXT, но только при поиске в них учитывается регистр символов ("abc" и "ABC" - разные строки). Вего имеется 4 типа бинарных данных
Тип | Описание |
---|---|
TINYBLOB | Может хранить максимум 255 символов |
BLOB | Может хранить не более 65535 символов |
MEDIUMBLOB | Может хранить максимум 16777215 символов |
LONGBLOB | Может хранить 4294967295 символов |
strong и время
MySQL поддерживает несколько типов полей, специально приспособленных для хранения дат и времени в различных форматах
Тип | Описание |
---|---|
DATE | Дата в формате ГГГГ-ММ-ДД |
TIME | Время в формате ЧЧ:ММ:СС |
DATETIME | Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС |
TIMESTAMP | Время и дата в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГММДДЧЧММСС, что сильно умаляет преимущества его использования в PHP |
Модификаторы и флаги типов
К типу можно также присоединять модификаторы, которые задают его "поведение" и те операции, которые можно (или, наоборот, запрещено) выполнять с соответствующими столбцами
Модификатор | Описание |
---|---|
not null | Означает, что поле не может содержать неопределенное значение - в частности, поле обязательно должно быть инициализировано при вставке новой записи в таблицу (если не задано значение по умолчанию) |
primary key | Отражает, что поле является первичным ключом, т.е. идентификатором записи, на который можно ссылаться |
auto_increment | При вставке новой записи поле получит уникальное значение, так что в таблице никогда не будут существовать 2 поля с одинаковыми номерами |
Default | Задает значение по умолчанию для поля, которое будет использовано, если при вставке записи поле не было проинициализировано явно |
Для чего нужен auto_increment?
Все просто. В таблице обычно содержится очень много записей. При этом некоторые записи совпадают. Чтобы придать каждой записи уникальность нам нужен некий идентификатор (id). Как его сделать?
Как раз для решения этой проблемы и предназначена в MySQL возможность под названием AUTO_INCREMENT. А именно, при создании таблицы мы можем какое-нибудь ее поле (в нашем случае как раз id) объявить так:
ИмяПоля int auto_increment primary key
Немного длинновато, но это стоит того! Теперь любая операция INSERT автоматически проставит у добавленной записи поле ИмяПоля так, чтобы оно было уникально во всей таблице - MySQL это гарантирует. В простейшем случае - просто увеличит на 1 некий внутренний счетчик, глобальный для всей таблицы, и занесет его новое значение в нужное поле записи. Причем гарантируется, что никакие проблемы с совместным доступом к таблице просто не могут возникнуть, как это произошло бы, используй мы "кустарные" способы.
Получить только что вставленный идентификатор можно при помощи функции
mysql_insert_id();
Итак, создаем таблицу в MySQL
db_connect($serverMySql,$db_log,$db_pass);
mysql_select_db($database);
mysql_query("CREATE TABLE users(id int auto_increment primary key,
email TINYTEXT,
password VARCHAR(16),
name TINYTEXT,
daybirth VARCHAR(2),
monthbirth VARCHAR(40),
yearbirth VARCHAR (4))") or die(mysql_error());
mysql_close();
print"Таблица создана!";