Команды SQL часть2

Давайте теперь аналогичным образом создадим другие таблицы.

Следующей по порядку идет таблица forums, в которой содержатся данные о разделах форума.

Примечание

Для удобства на форуме может быть создано несколько различных разделов. К примеру, на форуме по языкам программирования для того, чтобы не смешивать темы, относящиеся к различным языкам, имеет смысл создать следующие разделы: С++, PHP, Java и т. д.

В таблице forums присутствуют следующие поля: первичный ключ (id_forum), название раздела (name), правила форума (rule), краткое описание форума (logo), порядковый номер (pos), флаг, принимающий значение 1, если форум скрытый и 0, если общедоступный (hide).

Вот SQL-запрос, создающий таблицу forums

mysql> CREATE TABLE forums (
id_forum int(6) NOT NULL auto_increment,
name text,
rule text,
logo text,
pos int(6) default NULL,
hide int(1) default NULL,
PRIMARY KEY (id_forum)
) TYPE=MyISAM;

Структура форума может быть следующей: имеются список разделов, переход по которым приводит посетителя к списку тем раздела. При переходе по теме посетитель приходит к обсуждению этой темы, состоящих из сообщений других посетителей. Теперь создадим таблицу themes, содержащую темы форума:

mysql> CREATE TABLE themes (
id_theme int(11) NOT NULL auto_increment,
name text,
author text,
id_author int(6) default NULL,
hide int(1) default NULL,
time datetime default NULL,
id_forum int(2) default NULL,
PRIMARY KEY (id_theme)
) TYPE=MyISAM;

В таблице themes присутствуют следующие поля: первичный ключ (id_theme), название темы (name), автор темы (author), внешний ключ к таблице авторов (id_author), флаг, принимающий значение 1, если тема отмечена скрытой и 0, если отображается (hide) - это поле необходимо для модерирования, время добавления темы (time), внешний ключ к таблице форумов (id_forum), для того чтобы определить к какому разделу форума относится данная тема.

В таблице themes нормализация проведена частично, она содержит два внешних ключа: id_author и id_forum для таблиц посетителей и списка форумов, в тоже время в ней дублируется имя автора author, присутствующее также в таблице посетителей authors под именем name. Этот случай является примером денормализации предназначенной для того, чтобы не запрашивать каждый раз таблицу авторов при выводе списка тем и их авторов, чтобы обеспечить приемлемую скорость работы форума.

Создадим последнюю таблицу posts, в которой хранятся сообщения:

mysql> CREATE TABLE posts (
id_post int(11) NOT NULL auto_increment,
name text,
url text,
file text,
author text,
id_author int(6) default NULL,
hide int(1) default NULL,
time datetime default NULL,
parent_post int(11) default NULL,
id_theme int(11) default NULL,
PRIMARY KEY (id_post)
) TYPE=MyISAM;

В таблице posts присутствуют следующие поля: первичный ключ (id_post), тело сообщения (name), необязательная ссылка на ресурс, которую автор сообщения может ввести при добавлении сообщения (url), путь к файлу прикрепляемому к сообщению (file), имя автора (author), внешний ключ к таблице авторов (id_author), флаг, принимающий значение 1, если сообщение отмечено как скрытое и 0, если он отображается (hide) - это поле необходимо для модерирования, время добавления сообщения (time), сообщение ответом на которое является данное сообщение (parent_post), если это первое сообщение в теме - это поле равно 0, внешний ключ к тем (id_theme), для того чтобы определить к какой теме относится сообщение.

Убедимся, что все таблицы успешно созданы, выполнив команду SHOW TABLES (рис.)
img_php73.gif

DESCRIBE

Команда DESCRIBE показывает структуру созданных таблиц и имеет следующий синтаксис:

DESCRIBE tаble_name

Здесь tаble_name - имя таблицы структура которой запрашивается.

Замечание

Команда DESCRIBE не входит в стандарт SQL и является внутренней командой СУБД MySQL.
Давайте посмотрим, к примеру, структуру таблицы forums, выполнив следующий SQL-запрос:
mysql< DESCRIBE forums;
После выполнения этой команды, интерпретатор mysql выведет следующую таблицу
img_php73_2.gif

ALTER TABLE

Команда ALTER TABLE позволяет изменить структуру таблицы. Эта команда позволяет добавлять и удалять столбцы, создавать и уничтожать индексы, переименовывать столбцы и саму таблицу. Команда имеет следующий синтаксис:

ALTER TABLE table_name alter_spec

Параметр alter_spec имеет значения, представленные в таблице

Синтаксис

Описание команды

ADD create_definition [FIRST|AFTER column_name]

Добавление нового столбца create_definition. create_definition представляет собой название нового столбца и его тип. Конструкция FIRST добавляет новый столбец перед столбцом column_name. Конструкция AFTER добавляет новый столбец после столбца column_name. Если место добавления не указано, по умолчанию столбец добавляется в конец таблицы.

ADD INDEX [index_name] (index_col_name,...)

Добавление индекса index_name для столбца index_col_name. Если имя индекса index_name не указывается, ему присваивается имя совпадающее с именем столбца index_col_name.

ADD PRIMARY KEY (index_col_name,...)

Делает столбец index_col_name или группу столбцов первичным ключом таблицы.

CHANGE old_col_name new_col_name type

Изменение столбца с именем old_col_name на столбец с именем new_col_name и типом type.

DROP col_name

Удаление столбца с именем col_name.

DROP PRIMARY KEY

Удаление первичного ключа таблицы.

DROP INDEX index_name

Удаление индекса index_name.

Добавим в таблицу forums новый столбец test, разместив его после столбца name.
mysql> ALTER TABLE forums ADD test int(10) AFTER name;

Выполнив команду DESCRIBE forums, можно увидеть, что столбец test успешно добавлен после столбца name
img_php73_3.gif

Давайте переименуем созданный столбец test в текстовый столбец new_test

mysql>ALTER TABLE forums CHANGE test new_test text;

Как видно из рисунка, столбец успешно переименован: (рис.)
img_php73_4.gif

<<< - Предыдущая | Cледующая ->>>