Quy trình: 1. Thêm cột mới (ALTER TABLE ADD COLUMN), 2. Cập nhật cột mới bằng CONCAT 2 cột cũ.
Ví dụ minh họa
Tạo bảng tên/ho:
CREATE TABLE DemoTable1590 (FirstName VARCHAR(20), LastName VARCHAR(20));
INSERT INTO DemoTable1590 VALUES ('Adam','Smith'), ('John','Doe'), ('David','Miller');
Bước 1: Thêm cột FullName:
ALTER TABLE DemoTable1590 ADD COLUMN FullName VARCHAR(40);
Bước 2: Cập nhật ghép nối:
UPDATE DemoTable1590 SET FullName = CONCAT(FirstName, ' ', LastName);
Kết quả
| FirstName | LastName | FullName |
|---|---|---|
| Adam | Smith | Adam Smith |
| John | Doe | John Doe |
| David | Miller | David Miller |
Các cải tiến
1. Xử lý NULL
UPDATE DemoTable1590
SET FullName = CONCAT_WS(' ', FirstName, LastName);
CONCAT_WS (With Separator) bỏ qua NULL tự động: CONCAT_WS(' ', 'John', NULL) → 'John' (không thành NULL).
2. Generated Column (MySQL 5.7+)
Không cần UPDATE, tự động tính:
ALTER TABLE DemoTable1590
ADD COLUMN FullName VARCHAR(40)
GENERATED ALWAYS AS (CONCAT_WS(' ', FirstName, LastName)) STORED;
STORED: Tính khi INSERT/UPDATE, lưu vật lý (có index được).VIRTUAL: Tính khi SELECT, không lưu (mặc định).
3. Tạo index trên cột generated
ALTER TABLE DemoTable1590 ADD INDEX idx_fullname (FullName);
Chỉ hoạt động với STORED generated column.
Lưu ý ALTER TABLE
- MySQL 5.6+ hỗ trợ
ALGORITHM=INPLACEcho ADD COLUMN (không copy bảng, nhanh). - Bảng lớn: chạy ở giờ ít tải, hoặc dùng
pt-online-schema-change(Percona Toolkit).