Структуру существующей таблицы можно изменить с помощью команды 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 categories (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)
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Модификация таблиц
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Другие модификаторы таблиц | Все о MySQL. Получение информации о базах данных, таблицах и индексах |