Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp lại thứ tự cột trong bảng MySQL


MySQL cho phép thay đổi vị trí cột dùng ALTER TABLE ... CHANGE COLUMN ... FIRST|AFTER.

Cú pháp

-- Di chuyển cột lên đầu
ALTER TABLE table_name 
CHANGE COLUMN column_name column_name data_type FIRST;

-- Di chuyển cột sau cột khác
ALTER TABLE table_name 
CHANGE COLUMN column_name column_name data_type AFTER other_column_name;

Lưu ý: Phải lặp lại tên cột và kiểu dữ liệu (data_type) ngay cả khi không đổi.

Ví dụ minh họa

Bảng ban đầu:

mysql> SHOW CREATE TABLE AddColumn;
+-----------+------------------------------------------------------------------+
| Table     | Create Table                                                     |
+-----------+------------------------------------------------------------------+
| AddColumn | CREATE TABLE `addcolumn` (`StudentId` varchar(50), `StudentName` varchar(300)) ... |
+-----------+------------------------------------------------------------------+

mysql> DESC AddColumn;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| StudentId   | varchar(50)  | YES  |     | NULL    |       |
| StudentName | varchar(300) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

Di chuyển StudentName lên đầu:

mysql> ALTER TABLE AddColumn 
CHANGE StudentName StudentName VARCHAR(300) FIRST;
Query OK, 0 rows affected (1.28 sec)

Kết quả:

+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| StudentName | varchar(300) | YES  |     | NULL    |       |
| StudentId   | varchar(50)  | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+

Lưu ý quan trọng

  • Thao tác này rebuild toàn bộ bảng (table rebuild) → khóa bảng, tốn thời gian với bảng lớn.
  • Production: dùng pt-online-schema-change (Percona) hoặc gh-ost (GitHub) để tránh downtime.
  • Thứ tự cột chỉ ảnh hưởng SELECT *, DESC, INSERT không chỉ định cột. Không ảnh hưởng hiệu năng truy vấn.
  • Không thể dùng BEFORE column_name, chỉ có FIRST và AFTER.