Изменение типа таблицы

Задача
Таблица относится к одному типу, но вы знаете, что другой тип обладает более удобными свойствами для решения вашей задачи.

Решение
Для изменения типа таблицы используйте предложение ALTER TABLE с инструкцией TYPE.

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

• Изменение типа таблицы может выполняться для обеспечения доступа к тем возможностям, которые присущи одному, но не другому типу. Например, таблица ISAM не позволяет использовать значения NULL в индексированных столбцах. Кроме того, столбец AUTO_INCREMENT в таблицах ISAM ведет себя не совсем обычно, так что в некоторых условиях значения последовательности могут быть немонотонными. Вы можете преобразовать таблицу ISAM в тип MyISAM, с которым не возникает проблем подобного рода. Или вы можете обнаружить, что вам необходимо выполнять транзакции для таблицы, созданной с таким типом, который этого не позволяет.


Чтобы решить проблему, можно изменить тип таблицы, например, на InnoDB или BDB, которые поддерживают транзакции.

• Старейшим типом таблиц, поддерживаемым MySQL, является ISAM, но такие таблицы сейчас подвергаются резкой критике и вскоре перестанут поддерживаться. Так что в некоторый момент вы можете захотеть преобразовать ваши таблицы ISAM (если такие есть) в какой-то другой тип. В противном случае после отмены поддержки ISAM вы не сможете произвести обновление версии MySQL.

Для изменения типа таблицы используйте ALTER TABLE со спецификатором TYPE.

Например, чтобы преобразовать таблицу в тип MyISAM, выполните предложение:

ALTER TABLE имя_таблицы TYPE = MYISAM;

Чтобы узнать текущий тип таблицы, используйте предложение SHOW TABLE STATUS (появилось в версии MySQL 3.23.0) или SHOW CREATE TABLE (введено в MySQL 3.23.20):

mysql> SHOW TABLE STATUS LIKE 'mytbl'\G
*************************** 1. row ***************************
Name: mytbl
Type: MyISAM
Row_format: FixedRows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 85899345919
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2002-07-15 21:28:34
Update_time: 2002-07-15 21:28:34
Check_time: NULL
Create_options:
Comment:
mysql> SHOW CREATE TABLE mytbl\G
*************************** 1.


row ***************************
Table: mytbl
Create Table: CREATE TABLE `mytbl` (
`c` char(10) default NULL,
`j` bigint(20) default NULL,
`e2` enum('hardware','software','books','office supplies',
'telecommunications','furniture','utilities','shipping','tax') default NULL
) TYPE=MyISAM

В качестве альтернативы можно использовать утилиту командной строки mysqldump:

% mysqldump --no-data cookbook mytbl
CREATE TABLE mytbl (
c char(10) default NULL,
j bigint(20) default NULL,
e2 enum('hardware','software','books','office supplies',
'telecommunications','furniture','utilities','shipping','tax') default NULL
) TYPE=MyISAM;

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Добавление и удаление индексов
Изменение значения столбца по умолчанию
Изменение определения или имени столбца
Использование предложения ALTER TABLE для нормализации таблицы
Переименование таблицы