MySQL - команда ALTER
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 Предложение не будет работать, если в таблице остался единственный столбец.
Чтобы добавить столбец, используйте ДОБАВИТЬ и укажите определение столбца. Следующее утверждение восстанавливаетi столбец в testalter_tbl -
mysql> ALTER TABLE testalter_tbl ADD i INT;
После выполнения этого оператора testalter будет содержать те же два столбца, что и при первом создании таблицы, но не будет иметь такой же структуры. Это связано с тем, что по умолчанию в конец таблицы добавляются новые столбцы. Так что хотяi изначально был первым столбцом в 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. Это означает, что если вы хотите изменить положение существующего столбца в таблице, вы сначала должныDROP это а потом 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;
The Effect of ALTER TABLE on Null and Default Value Attributes- При ИЗМЕНЕНИИ или ИЗМЕНЕНИИ столбца вы также можете указать, может ли столбец содержать значения 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. Мы подробно обсудим эту команду в следующей главе.