Sử dụng ALTER TABLE ... ADD COLUMN ... AFTER để chèn cột mới sau một cột hiện có, hoặc FIRST để làm cột đầu tiên.
Cú pháp
-- Thêm sau cột hiện có ALTER TABLE table_name ADD COLUMN new_column_name data_type AFTER existing_column_name; -- Thêm làm cột đầu tiên ALTER TABLE table_name ADD COLUMN new_column_name data_type FIRST;
Ví dụ minh họa
Bảng ban đầu có 3 cột:
mysql> CREATE TABLE changeColumnPosition ( Id_Position1 INT, Name_Position2 VARCHAR(100), Address_Position4 VARCHAR(200) ); Query OK, 0 rows affected (0.53 sec) mysql> DESC changeColumnPosition; +-------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+-------+ | Id_Position1 | int(11) | YES | | NULL | | | Name_Position2 | varchar(100) | YES | | NULL | | | Address_Position4 | varchar(200) | YES | | NULL | | +-------------------+--------------+------+-----+---------+-------+
Thêm cột Age_Position3 sau Name_Position2:
mysql> ALTER TABLE changeColumnPosition ADD Age_Position3 INT AFTER Name_Position2; Query OK, 0 rows affected (1.34 sec)
Kết quả:
+-------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+-------+ | Id_Position1 | int(11) | YES | | NULL | | | Name_Position2 | varchar(100) | YES | | NULL | | | Age_Position3 | int(11) | YES | | NULL | | | Address_Position4 | varchar(200) | YES | | NULL | | +-------------------+--------------+------+-----+---------+-------+
Lưu ý
- MySQL không hỗ trợ
BEFORE column_name. Chỉ cóAFTERvàFIRST. - Thao tác này có thể khóa bảng (lock) nếu bảng lớn. Cân nhắc dùng
pt-online-schema-change(Percona Toolkit) cho production. - Thứ tự cột không ảnh hưởng đến hiệu năng truy vấn, chỉ ảnh hưởng hiển thị (
SELECT *,DESC).