MySQL cho phép thêm cột mới vào vị trí cụ thể trong bảng (sau một cột đã có) và đồng thời đặt giá trị mặc định (DEFAULT) cho cột đó bằng câu lệnh ALTER TABLE.
Tạo bảng ban đầu
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName VARCHAR(20),
StudentAge INT,
StudentCountryName VARCHAR(100)
);
Xem cấu trúc bảng
mysql> DESC DemoTable;
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentFirstName | varchar(20) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
| StudentCountryName | varchar(100) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
Thêm cột StudentLastName SAU cột StudentFirstName
Bước 1: Thêm cột với NOT NULL (bắt buộc có giá trị) và vị trí AFTER StudentFirstName:
mysql> ALTER TABLE DemoTable
ADD StudentLastName VARCHAR(20) NOT NULL AFTER StudentFirstName;
Bước 2: Đặt giá trị mặc định (DEFAULT) cho cột vừa thêm:
mysql> ALTER TABLE DemoTable
ALTER StudentLastName SET DEFAULT 'Doe';
Kiểm tra cấu trúc sau khi thay đổi
mysql> DESC DemoTable;
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| StudentId | int(11) | NO | PRI | NULL | auto_increment |
| StudentFirstName | varchar(20) | YES | | NULL | |
| StudentLastName | varchar(20) | NO | | Doe | |
| StudentAge | int(11) | YES | | NULL | |
| StudentCountryName | varchar(100) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
Cột StudentLastName giờ nằm sau StudentFirstName và có giá trị mặc định là 'Doe'.
Lưu ý
- Nếu bảng đã có dữ liệu, thêm cột
NOT NULLkhông có DEFAULT sẽ lỗi. Cần cung cấp DEFAULT hoặc cho phép NULL. - Từ MySQL 8.0.12, có thể gộp 2 bước thành 1:
ALTER TABLE DemoTable ADD StudentLastName VARCHAR(20) NOT NULL DEFAULT 'Doe' AFTER StudentFirstName; FIRSTđể thêm cột làm cột đầu tiên.