Учебники

MySQLi – команда ALTER

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

Начнем с создания таблицы с именем tutorials_alter .

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Удаление, добавление или изменение положения столбца

Предположим, что вы хотите удалить существующий столбец i из таблицы MySQLi, затем вы будете использовать предложение DROP вместе с командой ALTER следующим образом:

mysql> ALTER TABLE tutorials_alter  DROP i;

DROP не будет работать, если в таблице остается только один столбец.

Чтобы добавить столбец, используйте ADD и укажите определение столбца. Следующий оператор восстанавливает столбец i в tutorials_alter –

mysql> ALTER TABLE tutorials_alter ADD i INT;

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

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 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 tutorials_alter MODIFY c CHAR(10);

С CHANGE синтаксис немного отличается. После ключевого слова CHANGE вы даете имя столбцу, который хотите изменить, затем задаете новое определение, которое включает новое имя. Попробуйте следующий пример:

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

Если вы теперь используете CHANGE для преобразования j из BIGINT обратно в INT без изменения имени столбца, оператор будет таким, как ожидалось –

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

Влияние ALTER TABLE на нулевые атрибуты и атрибуты значений по умолчанию –

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

Вот пример, где столбец NOT NULL будет иметь значение 100 по умолчанию.

mysql> ALTER TABLE tutorials_alter 
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Если вы не используете указанную выше команду, MySQLi заполнит значения NULL во всех столбцах.

Изменение значения столбца по умолчанию

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

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

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

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

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

Вы можете использовать тип таблицы, используя предложение TYPE вместе с командой ALTER.

Чтобы узнать текущий тип таблицы, используйте оператор SHOW TABLE STATUS.

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Переименование таблицы

Чтобы переименовать таблицу, используйте опцию RENAME инструкции ALTER TABLE. Попробуйте следующий пример, чтобы переименовать tutorials_alter в tutorials_bks.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

Вы можете использовать команду ALTER для создания и удаления INDEX для файла MySQL. Мы увидим эту функцию в следующей главе.