Изменить структуру таблицы позволяет оператор ALTER TABLE. С его помощью можно
добавлять и удалять столбцы, создавать и уничтожать индексы, переименовывать
столбцы и саму таблицу. Оператор имеет следующий синтаксис:
ALTER TABLE table_name alter_spec
Наиболее часто используемые значения параметра alter_spec приводятся в табл. 37.7.
Глава 37. Работа с СУБД MySQL 683
Таблица 37.7. Основные преобразования, выполняемые оператором ALTER TABLE
Синтаксис Описание
ADD fld [FIRST|AFTER column] Добавляет новый столбец. fld представляет собой назва-
ние нового столбца и его тип. Конструкция FIRST добавляет
новый столбец перед столбцом column; конструкция
AFTER — после него. Если место добавления не указано,
столбец добавляется в конец таблицы
ADD INDEX [name] (col,...) Добавляет индекс name для столбца col. Если имя индекса
name не указывается, ему присваивается имя, совпадающее
с именем столбца col
ADD PRIMARY KEY (col,...) Делает столбец col или группу столбцов первичным ключом
таблицы
CHANGE old new type Заменяет столбец с именем old на столбец с именем new
и типом type
DROP col Удаляет столбец с именем col
DROP PRIMARY KEY Удаляет первичный ключ таблицы
DROP INDEX name Удаляет индекс name
Добавим в таблицу forums новый столбец test, разместив его после столбца name.
ALTER TABLE forums ADD test int(10) AFTER name;
DESCRIBE forums;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | tinytext | YES | | NULL | |
| test | int(10) | YES | | NULL | |
| rule | text | YES | | NULL | |
| logo | tinytext | YES | | NULL | |
| pos | int(11) | YES | | NULL | |
| hide | enum('show','hide') | NO | | show | |
+-------+---------------------+------+-----+---------+----------------+
Переименуем созданный столбец test в текстовый столбец new_test.
ALTER TABLE forums CHANGE test new_test TEXT;
DESCRIBE forums;
+----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | tinytext | YES | | NULL | |
| new_test | text | YES | | NULL | |
| rule | text | YES | | NULL | |
| logo | tinytext | YES | | NULL | |
| pos | int(11) | YES | | NULL | |
| hide | enum('show','hide') | NO | | show | |
+----------+---------------------+------+-----+---------+----------------+
684 Часть VII. Расширения PHP
При изменении только типа столбца указание имени все равно необходимо, хотя в этом
случае оно будет фактически повторяться.
ALTER TABLE forums CHANGE new_test new_test INT(5) NOT NULL;
DESCRIBE forums;
+----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | tinytext | YES | | NULL | |
| new_test | int(5) | NO | | NULL | |
| rule | text | YES | | NULL | |
| logo | tinytext | YES | | NULL | |
| pos | int(11) | YES | | NULL | |
| hide | enum('show','hide') | NO | | show | |
+----------+---------------------+------+-----+---------+----------------+
Теперь удалим столбец new_test.
ALTER TABLE forums DROP new_test;
DESCRIBE forums;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | tinytext | YES | | NULL | |
| rule | text | YES | | NULL | |
| logo | tinytext | YES | | NULL | |
| pos | int(11) | YES | | NULL | |
| hide | enum('show','hide') | NO | | show | |
+-------+---------------------+------+-----+---------+----------------+
Оператор DROP TABLE предназначен для удаления одной или нескольких таблиц:
DROP TABLE table_name [ , table_name,...]
Например, для удаления таблицы forums необходимо выполнить следующий SQL-
запрос:
DROP TABLE forums;
|