เมื่อคอลัมน์ DECIMAL มีขนาดเล็กเกินไป (เช่น DECIMAL(3,2) รองรับแค่ 9.99) และต้องการเพิ่มจำนวนหลัก ใช้คำสั่ง ALTER TABLE ... MODIFY COLUMN
รูปแบบคำสั่ง
ALTER TABLE table_name
MODIFY COLUMN column_name DECIMAL(precision, scale);
precision (M)- จำนวนหลักทั้งหมด (1-65)scale (D)- จำนวนหลักทศนิยม (0-30, ต้อง ≤ M)- ตัวอย่าง:
DECIMAL(10,4)= รองรับ 999,999.9999 (6 หลักจำนวนเต็ม + 4 ทศนิยม)
ตัวอย่างการใช้งาน
1. สร้างตารางด้วย DECIMAL(3,2)
CREATE TABLE allowDecimalWithMoreDigit (
Id INT NOT NULL AUTO_INCREMENT,
Salary DECIMAL(3,2),
PRIMARY KEY (Id)
);
2. ตรวจสอบโครงสร้าง (DESC)
DESC allowDecimalWithMoreDigit;
ผลลัพธ์:
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Salary | decimal(3,2) | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
คอลัมน์ Salary เป็น decimal(3,2) (สูงสุด 9.99)
3. แก้ไขเป็น DECIMAL(10,4)
ALTER TABLE allowDecimalWithMoreDigit
MODIFY COLUMN Salary DECIMAL(10,4);
ผลลัพธ์: Query OK, 0 rows affected
4. ตรวจสอบโครงสร้างอีกครั้ง
DESC allowDecimalWithMoreDigit;
ผลลัพธ์:
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Salary | decimal(10,4) | YES | | NULL | |
+--------+---------------+------+-----+---------+----------------+
ตอนนี้ Salary เป็น decimal(10,4) รองรับได้ถึง 999,999.9999
ข้อควรระวัง
| สถานการณ์ | ผลกระทบ | คำแนะนำ |
|---|---|---|
| ลด Precision (10,4 → 5,2) | อาจสูญเสียข้อมูล (Truncate/Error) | Backup ก่อน, ตรวจสอบข้อมูลก่อน |
| ลด Scale (10,4 → 10,2) | ปัดเศษทศนิยม | คาดการณ์ผลกระทบ |
| เพิ่ม Precision/Scale | ปลอดภัย (ขยายได้) | ทำได้ทุกเมื่อ |
| มี Index บนคอลัมน์ | Index จะ Rebuild | ทำในช่วง Maintenance |
| เป็น Foreign Key | ต้อง Drop FK ก่อน (บาง Version) | ตรวจสอบ Constraints |
ข้อมูลเพิ่มเติม: DECIMAL Storage
- เก็บเป็น Binary Coded Decimal (BCD) - 4 bits ต่อหลัก
- Precision 1-9: 4 bytes, 10-18: 8 bytes, 19-27: 12 bytes, ...
- คำนวณ Storage:
CEIL(M/9) * 4bytes (ประมาณ)
สรุป
ใช้ ALTER TABLE ... MODIFY COLUMN col DECIMAL(M,D) เพื่อขยายขนาด DECIMAL ได้อย่างปลอดภัย (เพิ่ม M/D) แต่ต้องระวังการลดขนาดที่อาจทำให้ข้อมูลหาย