А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
0-9 A B C D I F G H IJ K L M N O P Q R S TU V WX Y Z #


Чтение книги "MySQL 5.0. Библиотека программиста" (страница 8)

   Изменение структуры таблицы

   В этом подразделе будет описано, как изменить те параметры таблицы, которые мы обсуждали в предыдущем подразделе. Для модификации ранее созданной таблицы используется команда ALTER TABLE. Задавая различные параметры этой команды, вы можете внести в таблицу следующие изменения.
   • Добавить столбец вы можете с помощью команды

   ALTER TABLE <Имя таблицы>
   ADD <Имя столбца> <Тип столбца> [<Свойства столбца>]
   [FIRST или AFTER <Имя предшествующего столбца>];

   В этой команде мы указываем имя таблицы, в которую добавляется столбец, а также имя и тип добавляемого столбца (о типах столбцов см. пункт «Типы данных в MySQL»). При необходимости можно также задать свойства добавляемого столбца (см. пункт «Свойства столбцов»). Кроме того, можно определить место нового столбца среди уже существующих: добавляемый столбец может стать первым (FIRST) или следовать после указанного предшествующего столбца (AFTER). Если место столбца не задано, он становится последним столбцом таблицы.
   Например, чтобы добавить в таблицу Products (Товары) столбец store (название склада, где хранится каждый вид товара), выполните команду

   ALTER TABLE Products ADD store VARCHAR(100) AFTER details;

...
   Примечание
   Добавить столбец со свойством AUTO_INCREMENT можно только с одновременным созданием индекса или ключа для этого столбца. Например, если бы столбец id не был включен в таблицу Products (Товары) при ее создании, мы могли бы добавить его с помощью команды
   ALTER TABLE Products
   ADD id BIGINT AUTO_INCREMENT, ADD PRIMARY KEY (id);
   • Добавить первичный ключ вы можете с помощью команды

   ALTER TABLE <Имя таблицы>
   ADD [CONSTRAINT <Имя ключа>]
   PRIMARY KEY (<Список столбцов>);

   При добавлении в таблицу первичного ключа мы указываем имя таблицы, в которую нужно добавить ключ, и имена столбцов, которые будут образовывать первичный ключ (эти столбцы должны уже существовать в таблице). Более подробно о первичных ключах было сказано в пункте «Ключевые столбцы и индексы».
   Например, если бы первичный ключ не был определен при создании таблицы Orders (Заказы), мы могли бы добавить его с помощью команды

   ALTER TABLE Orders ADD PRIMARY KEY (id);

   • Добавить внешний ключ вы можете с помощью команды

   ALTER TABLE <Имя таблицы>
   ADD [CONSTRAINT <Имя внешнего ключа>]
   FOREIGN KEY [<Имя индекса>] (<Список столбцов>)
   REFERENCES <Имя родительской таблицы>
   (<Список столбцов первичного ключа родительской таблицы>)
   [<Правила поддержания целостности связи>];

   При добавлении в таблицу внешнего ключа мы указываем имя таблицы, в которую нужно добавить ключ, имена столбцов, которые будут образовывать внешний ключ (эти столбцы должны уже существовать в таблице), а также имя родительской таблицы (на которую будет ссылаться данная таблица) и имена столбцов, образующих первичный ключ в родительской таблице. В случае необходимости можно также задать имя создаваемого внешнего ключа, имя индекса, автоматически добавляемого для столбцов внешнего ключа, и правила поддержания целостности связи при удалении и изменении строк родительской таблицы.
   Например, если бы внешний ключ не был определен при создании таблицы Orders (Заказы), мы могли бы добавить его с помощью команды

   ALTER TABLE Orders
   ADD FOREIGN KEY (customer_id) REFERENCES Customers (id)
   ON DELETE RESTRICT ON UPDATE CASCADE);

   Более подробно о внешних ключах говорилось в пункте «Ключевые столбцы и индексы».
   • Добавить в таблицу обычный индекс вы можете с помощью команды

   ALTER TABLE <Имя таблицы>
   ADD INDEX [<Имя индекса>] (<Список столбцов>);

   Добавить уникальный индекс – с помощью команды

   ALTER TABLE <Имя таблицы>
   ADD [CONSTRAINT <Имя ограничения>]
   UNIQUE (<Список столбцов>);

   Добавить полнотекстовый индекс – с помощью команды ALTER TABLE <Имя таблицы>

   ALTER TABLE <Имя таблицы>
   ADD FULLTEXT [<Имя индекса>] (<Список столбцов>);

   При добавлении в таблицу индекса мы указываем имя таблицы, в которую нужно добавить индекс, и имена столбцов, включенных в индекс. В случае необходимости можно также задать имя индекса. Более подробно об индексах было сказано в пункте «Ключевые столбцы и индексы».
   Например, добавить индекс для столбца store (склад) таблицы Products (Товары) можно с помощью команды

   ALTER TABLE Products ADD INDEX (store);

   • Изменить столбец таблицы вы можете с помощью следующих команд:
   – Чтобы полностью изменить описание столбца, выполните команду

   ALTER TABLE <Имя таблицы>
   CHANGE <Прежнее имя столбца >
   <Новое имя столбца>
   <Новый тип столбца> [<Свойства столбца>]
   [FIRST или AFTER <Имя предшествующего столбца>];

...
   Внимание!
   Изменять тип столбца, который уже содержит какие-либо значения, необходимо с осторожностью, так как при этом возможно внесение коррективов в значения. Например, если тип данных с плавающей точкой меняется на целочисленный, числовые значения будут округлены.
   В этой команде мы указываем имя таблицы, текущее имя столбца, новое имя столбца (которое может совпадать с текущим), новый тип столбца (который также может совпадать с текущим типом), а также, при необходимости, свойства столбца (старые свойства при выполнении команды CHANGE удаляются). Кроме того, можно определить место столбца среди остальных столбцов таблицы: изменяемый столбец может стать первым (FIRST) или следовать после указанного предшествующего столбца (AFTER).
   Например, чтобы переименовать столбец store (склад) таблицы Products (Товары) в warehouse (склад) и изменить его тип на CHAR(100), выполните команду

   ALTER TABLE Products CHANGE store warehouse CHAR(100);

   Чтобы присвоить столбцу свойство AUTO_INCREMENT, необходимо либо одновременно с этим, либо заранее создать индекс для этого столбца.
   – Чтобы изменить описание столбца без переименования, выполните команду

   ALTER TABLE <Имя таблицы>
   MODIFY <Имя столбца>
   <Новый тип столбца> [<Свойства столбца>]
   [FIRST или AFTER <Имя предшествующего столбца>];

   Данная команда полностью аналогична предыдущей, за исключением возможности переименования столбца.
   – Чтобы установить значение по умолчанию для столбца, выполните команду

   ALTER TABLE <Имя таблицы>
   ALTER <Имя столбца>
   SET DEFAULT <Значение по умолчанию>;

   Например, чтобы установить для столбца warehouse таблицы Products значение по умолчанию Склад № 1, выполните команду

   ALTER TABLE Products
   ALTER warehouse SET DEFAULT 'Склад № 1';

   Чтобы удалить значение по умолчанию, выполните команду
   ALTER TABLE <Имя таблицы>
   ALTER <Имя столбца> DROP DEFAULT;

   Например, удалить значение по умолчанию, установленное для столбца warehouse, можно с помощью команды

   ALTER TABLE Products ALTER warehouse DROP DEFAULT;

   • Удалить столбец таблицы вы можете с помощью команды

   ALTER TABLE <Имя таблицы> DROP <Имя столбца>;

   При удалении столбца он удаляется также из всех индексов, в которые он был включен (в отличие от первичного и внешнего ключа, которые требуется удалить прежде, чем удалять входящие в них столбцы). Если при этом в индексе не остается столбцов, то индекс также автоматически удаляется. Например, для удаления столбца warehouse (склад) из таблицы Products (Товары) выполните команду

   ALTER TABLE Products DROP warehouse;

   • Удалить первичный ключ вы можете с помощью команды

   ALTER TABLE <Имя таблицы> DROP PRIMARY KEY;

   Например, удалить первичный ключ из таблицы Orders (Заказы) можно с помощью команды

   ALTER TABLE Orders DROP PRIMARY KEY;

   • Удалить внешний ключ вы можете с помощью команды

   ALTER TABLE <Имя таблицы>
   DROP FOREIGN KEY <Имя внешнего ключа>;

   В этой команде необходимо указать имя внешнего ключа. Если вы не задали имя внешнего ключа при его создании, то имя было присвоено автоматически и узнать его можно с помощью команды SHOW CREATE TABLE (см. подраздел «Другие команды для работы с таблицами»).
   Например, удалить внешний ключ из таблицы Orders можно с помощью команды

   ALTER TABLE Orders DROP FOREIGN KEY orders_ibfk_1;

   (здесь orders_ibfk_1 – имя внешнего ключа, автоматически присвоенное ему при создании).
   • Удалить индекс (обычный, уникальный или полнотекстовый) вы можете с помощью команды

   ALTER TABLE <Имя таблицы> DROP INDEX <Имя индекса>;

   В этой команде необходимо указать имя индекса. Если вы не задали имя индекса при его создании, то имя было присвоено автоматически и узнать его можно с помощью команды SHOW CREATE TABLE (см. подраздел «Другие команды для работы с таблицами»).
   Например, удалить индекс, созданный для поля name (имя) таблицы Customers (Клиенты), можно с помощью команды

   ALTER TABLE Customers DROP INDEX name;

   (здесь name – имя индекса: по умолчанию индексу присваивается имя первого индексируемого столбца).
   • Включить и отключить обновление неуникальных индексов в таблице с типом MyISAM вы можете с помощью следующих команд:

   ALTER TABLE <Имя таблицы> DISABLE KEYS;

   Эта команда временно отключает обновление неуникальных индексов, что позволяет увеличить быстродействие операций добавления строк в таблицу.

   ALTER TABLE <Имя таблицы> ENABLE KEYS;

   Эта команда позволяет восстановить индексы после добавления строк.
   • Переименовать таблицу вы можете с помощью команды

   ALTER TABLE <Имя таблицы> RENAME <Новое имя таблицы>;

   • Упорядочить строки таблицы по значениям одного или нескольких столбцов вы можете с помощью команды

   ALTER TABLE <Имя таблицы>
   ORDER BY <Имя столбца 1> [ASC или DESC],
   [<Имя столбца 2> [ASC или DESC],…];

   Упорядочение строк позволяет ускорить последующие операции сортировки по значениям указанных столбцов. Однако порядок строк в таблице может нарушиться после операций добавления и удаления строк. По умолчанию строки таблицы упорядочиваются по возрастанию значений. Вы можете выбрать направление сортировки, указав ключевое слово ASC (по возрастанию) или DESC (по убыванию).
   Для таблиц с типом InnoDB, в которых есть первичный ключ или уникальный индекс, не допускающий неопределенных значений (NOT NULL UNIQUE), эта команда игнорируется, поскольку строки таких таблиц автоматически упорядочиваются по значениям этого ключа/индекса.
   • Задать опциональные свойства таблицы (см. пункт «Опциональные свойства таблицы») вы можете с помощью команды

   ALTER TABLE <Имя таблицы> <Опциональное свойство таблицы>;

   Например, изменить тип таблицы можно с помощью команды

   ALTER TABLE <Имя таблицы> ENGINE <Новый тип таблицы>;

   • Изменить кодировку и правило сравнения символьных значений, используемых по умолчанию для новых символьных столбцов таблицы, можно, как любое другое опциональное свойство таблицы, с помощью команды

   ALTER TABLE <Имя таблицы>
   CHARACTER SET <Имя кодировки>
   [COLLATE <Имя правила сравнения>];

   Например, если для таблицы Products (Товары) требуется установить в качестве кодировки по умолчанию кодировку CP-1251, это можно сделать с помощью команды

   ALTER TABLE Products CHARACTER SET cp1251;

   После выполнения этой команды существующие столбцы таблицы Products по-прежнему будут иметь кодировку UTF-8. Если же с помощью команды ALTER TABLE будут добавляться новые символьные столбцы, то им будет по умолчанию присваиваться кодировка CP-1251.
   Если вы хотите не только изменить кодировку, используемую по умолчанию для новых столбцов, но и преобразовать в новую кодировку существующие символьные столбцы таблицы, то нужно использовать команду

   ALTER TABLE <Имя таблицы>
   CONVERT TO CHARACTER SET <Имя кодировки>
   [COLLATE <Имя правила сравнения>];

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

   ALTER TABLE Products CONVERT TO CHARACTER SET cp1251;

   все наименования и описания товаров (значения столбцов description и details) преобразуются в кодировку CP-1251.
   Если же данные в столбце фактически закодированы с помощью одной кодировки, а в описании столбца указана другая кодировка, исправить эту ошибку можно, изменив кодировку только в описании столбца, без преобразования данных. Это можно сделать, преобразовав тип столбца из символьного в бинарный (то есть тип CHAR преобразовать в тип BINARY, тип VARCHAR – в тип VARBINARY, тип TEXT – в тип BLOB и т. п.), а затем обратно в символьный, уже в правильной кодировке. Для этого выполним последовательно две команды:

   ALTER TABLE <Имя таблицы>
   CHANGE <Имя столбца> <Имя столбца> <Бинарный тип данных>;
   ALTER TABLE <Имя таблицы>
   CHANGE <Имя столбца> <Имя столбца> <Исходный тип данных>
   CHARACTER SET <Фактическая кодировка значений>;

   Например, если для столбца details таблицы Products установлен тип TEXT и кодировка UTF-8, а данные в нем фактически находятся в кодировке CP-1251, приведем описание столбца в соответствие с реальной кодировкой с помощью команд

   ALTER TABLE Products CHANGE details details BLOB;
   ALTER TABLE Products
   CHANGE details details TEXT CHARACTER SET cp1251;

   Итак, вы изучили команду изменения таблицы. В следующем подразделе рассмотрим еще несколько полезных команд работы с таблицами.
Чтение онлайн



1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Навигация по сайту


Читательские рекомендации

Информация