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