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

เปลี่ยน Default Value ของ TINYINT เป็น 1 ใน MySQL

เมื่อต้องการเปลี่ยนค่า Default ของคอลัมน์ TINYINT (มักใช้เป็น Boolean Flag) ให้ใช้ ALTER TABLE ... CHANGE หรือ MODIFY พร้อมระบุ DEFAULT 1

สร้างตารางมีคอลัมน์ TINYINT

mysql> create table DemoTable (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserName varchar(20),
    UserAge int,
    isMarried tinyint(1)
);

ตรวจสอบ Default เดิม (NULL)

mysql> desc DemoTable;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| Id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserName  | varchar(20) | YES  |     | NULL    |                |
| UserAge   | int(11)     | YES  |     | NULL    |                |
| isMarried | tinyint(1)  | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

เปลี่ยน Default เป็น 1 และ NOT NULL

mysql> alter table DemoTable 
change isMarried isMarried TINYINT(1) DEFAULT 1 NOT NULL;

ตรวจสอบหลังเปลี่ยน

mysql> desc DemoTable;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| Id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserName  | varchar(20) | YES  |     | NULL    |                |
| UserAge   | int(11)     | YES  |     | NULL    |                |
| isMarried | tinyint(1)  | NO   |     | 1       |                |
+-----------+-------------+------+-----+---------+----------------+

CHANGE vs MODIFY

คำสั่ง MODIFY เทียบเท่า

ALTER TABLE DemoTable 
MODIFY isMarried TINYINT(1) DEFAULT 1 NOT NULL;

TINYINT(1) เป็น Boolean

  • MySQL ใช้ TINYINT(1) แทน Boolean (TRUE=1, FALSE=0)
  • DEFAULT 1 = TRUE โดยค่าเริ่มต้น
  • DEFAULT 0 = FALSE โดยค่าเริ่มต้น
  • Application ควร Map: true/false ↔ 1/0

คำเตือน

  • ข้อมูลเดิม - แถวที่มี NULL จะกลายเป็น 1 (เพราะ NOT NULL + DEFAULT 1)
  • Application - ต้องตรวจสอบ Code ที่อ่านค่านี้ ว่ารองรับ 1/0 หรือ true/false
  • Index - TINYINT Index เล็กและเร็ว เหมาะสำหรับ Flag
คำสั่งSyntaxใช้เมื่อ
CHANGECHANGE old_name new_name type ...ต้องการเปลี่ยนชื่อคอลัมน์พร้อมกับ Type
MODIFYMODIFY column_name type ...เปลี่ยน Type/Constraint เฉยๆ (ไม่เปลี่ยนชื่อ)