English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Команда ALTER MySQL

Когда нам нужно изменить имя таблицы или поля таблицы, нам нужно использовать команду MySQL ALTER.

Прежде чем начать этот раздел учебника, давайте сначала создадим таблицу с именем: testalter_tbl.

root@host# mysql -u root -p password;
Введите пароль:*******
mysql> use w3codebox;
База данных изменена
mysql> create table testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> ;
Запрос выполнен успешно, не затронуты строки (0.05 сек)
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)

Удаление, добавление или изменение полей таблицы

Следующие команды используют команду ALTER и подзапрос DROP для удаления поля i, созданного выше для таблицы:

mysql> ALTER TABLE testalter_tbl DROP i;

Если в таблице данных осталось только одно поле, удалить его с помощью DROP невозможно.

В MySQL используется подзапрос ADD для добавления столбца в таблицу данных, как показано в следующем примере: добавление поля i в таблицу testalter_tbl с определением типа данных:

mysql> ALTER TABLE testalter_tbl ADD i INT;

После выполнения вышеуказанных команд поле i будет автоматически добавлено в конец полей таблицы.

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)

Если вам нужно указать положение нового поля, вы можете использовать ключевые слова MySQL FIRST (устанавливает положение в первом столбце) и AFTER имя поля (устанавливает положение после определенного поля).

Попробуйте следующую команду 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, поэтому если вы хотите изменить положение поля в таблице данных, вам нужно сначала удалить поле с помощью 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;

Если вы хотите сейчас изменить поле j из BIGINT на INT, SQL-запрос будет выглядеть так:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

Влияние ALTER TABLE на значения Null и по умолчанию

Когда вы изменяете поле, вы можете указать, включать ли значение или устанавливать ли значения по умолчанию.

В следующем примере указано, что поле j должно быть 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)

Вы также можете использовать команду ALTER и подпредложение DROP для удаления значения по умолчанию поля, например:

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)
Изменение типа таблицы:

Изменить тип таблицы данных можно с помощью команды ALTER и подпредложения TYPE. Попробуйте следующий пример, мы изменим тип таблицы testalter_tbl на MYISAM:

Внимание:Просмотреть тип таблицы данных можно с помощью предложения SHOW TABLE STATUS.

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Имя: testalter_tbl
           Тип: 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:
        Комментарий:
1 row in set (0.00 sec)

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

Если нужно изменить имя таблицы, можно использовать предложение RENAME в语句е ALTER TABLE.

Попробуйте следующий пример для переименования таблицы testalter_tbl в alter_tbl:

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

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