Структуру существующей таблицы можно изменить с помощью команды ALTER TABLE, которая позволяет добавлять, удалять или модифицировать поля таблицы и индексы без необходимости создавать всю таблицу снова. Вот как выглядит ее синтаксис: ALTER TABLE имя-таблицы (действие объявление-поля, объявление-поля, ... );
Компонент действие здесь может быть представлен одним из ключевых слов (ADD, DROP, ALTER или CHANGE), за которым следуют определения полей, подобные тем, которые используются в команде CREATE TABLE. Объявление поля состоит из имени модифицируемого поля и (в зависимости от операции) объявления поля, состоящего из имени нового поля, типа и ограничений. Рассмотрим следующий пример, который сначала проиллюстрирует создание таблицы, а затем добавление к ней новых столбцов, 
Модификация таблиц
Модификация таблиц
Меняя все вокруг
При изменении типов полей, MySQL позволяет использовать наряду с ключевым словом CHANGE ключевое слово MODIFY. Различие между ними незначительное: ключевое CHANGE требует задания как старого, так и нового имени поля при изменении структуры таблицы, в то время как ключевое слово MODIFY предназначено, прежде всего для изменения типа поля, но без изменения его имени.
Это продемонстрировано на примере двух равносильных команд:
ALTER TABLE members CHANGE id id INT(8) AUTO_INCREMENT UNIQUE; ALTER TABLE members MODIFY id INT(8) AUTO_INCREMENT UNIQUE;
Заметим, что при замене одного типа поля на другой, MySQL автоматически пробует преобразовать данные из старого типа в новый.
Для переименования таблицы можно воспользоваться командой ALTER TABLE.
Модификация таблиц
Модификация таблиц
При добавлении ключа UNIQUE в таблицу, содержащую повторяющиеся значения по этому ключу, можно увидеть, каким образом MySQL решает эту задачу (удаляет все повторяющиеся записи или останавливает выполнение). Для этого можно воспользоваться предложением IGNORE. Рассмотрим следующую таблицу, содержащую одно и то же значение в поле name в двух записях.
Модификация таблиц
Модификация таблиц
А теперь, при попытке сделать поле name уникальным (UNIQUE), MySQL возвращает ошибку, вызванную повторением значений в этом поле.
Листинг 8.64.
mysql> ALTER TABLE users CHANGE name name VARCHAR(10) NOT NULL UNIQUE;
ERROR 1062: Duplicate entry 'john' for key 1
Однако, задав в команде ALTER TABLE предложение IGNORE, можно добиться того, что MySQL будет удалять все повторяющиеся записи по этому ключу из таблицы, оставив только первую попавшуюся запись.
Модификация таблиц
Листинг 8.66.
mysql> ALTER TABLE articles ADD FOREIGN KEY (fk_cid) REFERENCES cate­gories (cid) ON DELETE CASCADE ON UPDATE CASCADE;
Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0
Тип таблицы можно динамически менять с помощью команды ALTER TABLE. Для этого достаточно задать новое предложение TYPE. Рассмотрим следующий пример, в котором первоначальный тип таблицы users меняется на тип InnoDB.
Листинг 8.67.
mysql> ALTER TABLE users TYPE = INNODB;
Query OK, 6 rows affected (0.11 sec) Records: 6 Duplicates: 0 Warnings: 0
С помощью этой же команды ALTER TABLE можно добавлять и удалять индексы. Для этого используются предложения ADD INDEX или DROP INDEX. 

Листинг 8.68.
mysql> ALTER TABLE articles ADD FULLTEXT INDEX content_001(body);
Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE articles DROP INDEX content_001;
Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
Сделать больше с меньшими усилиями
Как видно из синтаксиса команды ALTER TABLE, MySQL позволяет модифицировать более одного поля за одну операцию, разделяя различные действия и определения полей запятыми. Это расширение стандарта SQL-92, характерное только для MySQL. В соответствии с оригинальным стандартом, для каждого изменения требуется отдельная команда ALTER TABLE. Так как команда ALTER TABLE относится к разряду медленных и использовать ее нужно как можно реже, эта возможность, предоставляемая MySQL, позволит снизить накладные расходы, связанные с этой командой.

Удаление таблиц
Для удаления таблиц предназначена команда DROP TABLE; вашему вниманию предлагается пример использования этой команды для удаления таблицы tbl1.
Листинг 8.69.
mysql> DROP TABLE tbl1;
Query OK, 0 rows affected (0.02 sec)
Как и прежде, во избежание надоедливых диагностических сообщений, которые MySQL выводит в случае отсутствия удаляемой таблицы, воспользуемся уже знакомым нам предложением IF EXISTS.
Листинг 8.70.
mysql> DROP TABLE tbl1;
ERROR 1051: Unknown table 'tbl1'
mysql> DROP TABLE IF EXISTS tbl1;
Query OK, 0 rows affected (0.00 sec)