Команда MySQL ALTER очень полезна, когда вы хотите изменить имя вашей таблицы, любое поле таблицы или если вы хотите добавить или удалить существующий столбец в таблице.
Давайте начнем с создания таблицы с именем testalter_tbl .
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table testalter_tbl -> ( -> i INT, -> c CHAR(1) -> ); Query OK, 0 rows affected (0.05 sec) mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | i | int(11) | YES | | NULL | | | c | char(1) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Удаление, добавление или изменение положения столбца
Если вы хотите удалить существующий столбец i из приведенной выше таблицы MySQL, вы будете использовать предложение DROP вместе с командой ALTER, как показано ниже:
mysql> ALTER TABLE testalter_tbl DROP i;
Предложение DROP не будет работать, если в таблице остается только один столбец.
Чтобы добавить столбец, используйте ADD и укажите определение столбца. Следующий оператор восстанавливает столбец i в testalter_tbl —
mysql> ALTER TABLE testalter_tbl ADD i INT;
После выполнения этого оператора testalter будет содержать те же два столбца, что и при первом создании таблицы, но не будет иметь такую же структуру. Это связано с тем, что по умолчанию в конец таблицы добавляются новые столбцы. Так что, хотя я изначально был первым столбцом в mytbl, теперь это последний.
mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Чтобы указать, что вы хотите столбец в определенной позиции в таблице, либо используйте FIRST, чтобы сделать его первым столбцом, либо AFTER col_name, чтобы указать, что новый столбец должен быть помещен после col_name.
Попробуйте следующие операторы ALTER TABLE , используя SHOW COLUMNS после каждого, чтобы увидеть, какой эффект у каждого из них —
ALTER TABLE testalter_tbl DROP i; ALTER TABLE testalter_tbl ADD i INT FIRST; ALTER TABLE testalter_tbl DROP i; ALTER TABLE testalter_tbl ADD i INT AFTER c;
Спецификаторы FIRST и AFTER работают только с предложением ADD. Это означает, что если вы хотите изменить положение существующего столбца в таблице, вы должны сначала УДАЛИТЬ его, а затем ДОБАВИТЬ в новую позицию.
Изменение (изменение) определения столбца или имени
Чтобы изменить определение столбца, используйте предложение MODIFY или CHANGE вместе с командой ALTER.
Например, чтобы изменить столбец c с CHAR (1) на CHAR (10), вы можете использовать следующую команду:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
С CHANGE синтаксис немного отличается. После ключевого слова CHANGE вы даете имя столбцу, который хотите изменить, затем задаете новое определение, которое включает новое имя.
Попробуйте следующий пример —
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
Если вы теперь используете CHANGE для преобразования j из BIGINT обратно в INT без изменения имени столбца, оператор будет выглядеть так, как показано ниже —
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
Влияние ALTER TABLE на нулевые атрибуты и атрибуты значений по умолчанию. Когда вы изменяете или меняете столбец, вы также можете указать, может ли столбец содержать значения NULL и каково его значение по умолчанию. Фактически, если вы этого не сделаете, MySQL автоматически назначит значения для этих атрибутов.
Следующий блок кода является примером, где столбец NOT NULL будет иметь значение по умолчанию 100.
mysql> ALTER TABLE testalter_tbl -> MODIFY j BIGINT NOT NULL DEFAULT 100;
Если вы не используете вышеупомянутую команду, тогда MySQL заполнит значения NULL во всех столбцах.
Изменение (изменение) значения по умолчанию для столбца
Вы можете изменить значение по умолчанию для любого столбца с помощью команды ALTER .
Попробуйте следующий пример.
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | 1000 | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Вы можете удалить ограничение по умолчанию из любого столбца, используя предложение DROP вместе с командой ALTER .
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT; mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
Изменение (изменение) типа таблицы
Вы можете использовать тип таблицы, используя предложение TYPE вместе с командой ALTER. Попробуйте следующий пример, чтобы изменить testalter_tbl на тип таблицы MYISAM .
Чтобы узнать текущий тип таблицы, используйте оператор SHOW TABLE STATUS .
mysql> ALTER TABLE testalter_tbl TYPE = MYISAM; mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G *************************** 1. row **************** Name: testalter_tbl Type: MyISAM Row_format: Fixed Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 25769803775 Index_length: 1024 Data_free: 0 Auto_increment: NULL Create_time: 2007-06-03 08:04:36 Update_time: 2007-06-03 08:04:36 Check_time: NULL Create_options: Comment: 1 row in set (0.00 sec)
Переименование (изменение) таблицы
Чтобы переименовать таблицу, используйте опцию RENAME инструкции ALTER TABLE .
Попробуйте следующий пример переименовать testalter_tbl в alter_tbl .
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
Вы можете использовать команду ALTER для создания и удаления команды INDEX для файла MySQL. Мы подробно обсудим эту команду в следующей главе.