Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: แก้ไขคอลัมน์ DECIMAL ให้รองรับหลักมากขึ้นด้วย MODIFY COLUMN

เมื่อคอลัมน์ 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) * 4 bytes (ประมาณ)

สรุป

ใช้ ALTER TABLE ... MODIFY COLUMN col DECIMAL(M,D) เพื่อขยายขนาด DECIMAL ได้อย่างปลอดภัย (เพิ่ม M/D) แต่ต้องระวังการลดขนาดที่อาจทำให้ข้อมูลหาย