Để mở rộng độ chính xác của cột DECIMAL (cho phép hơn chữ số), dùng ALTER TABLE ... MODIFY COLUMN.
Cú pháp
ALTER TABLE ten_bang MODIFY COLUMN ten_cot DECIMAL(tong_so_chu_so, so_chu_so_sau_dau_cham);
Ví dụ minh họa
Tạo bảng với DECIMAL(3,2) (tối đa 3 chữ số, 2 sau dấu chấm → max 9.99):
mysql> CREATE TABLE ChoPhepHonChuSo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Luong DECIMAL(3,2)
-> );
Kiểm tra cấu trúc:
mysql> DESC ChoPhepHonChuSo;
+--------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Luong | decimal(3,2) | YES | | NULL | | +--------+--------------+------+-----+---------+----------------+
Mở rộng thành DECIMAL(10,4) (tối đa 999999.9999)
mysql> ALTER TABLE ChoPhepHonChuSo MODIFY COLUMN Luong DECIMAL(10,4);
Kiểm tra lại:
mysql> DESC ChoPhepHonChuSo;
+--------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+---------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Luong | decimal(10,4) | YES | | NULL | | +--------+---------------+------+-----+---------+----------------+
Lưu ý quan trọng:
DECIMAL(M,D): M = tổng chữ số (precision), D = chữ số sau dấu thập phân (scale). M ≤ 65, D ≤ 30, D ≤ M- Mở rộng (tăng M, D) thường an toàn, không mất dữ liệu
- Thu hẹp (giảm M, D) có thể bị cắt bớt dữ liệu → MySQL cảnh báo
- Cần khóa bảng (metadata lock) → tránh chạy trên bảng lớn giờ cao điểm