การตั้งค่า Timestamp อัตโนมัติ: สร้างและอัปเดตอัตโนมัติ
คอลัมน์ TIMESTAMP (หรือ DATETIME ใน MySQL 5.6.5+) สามารถตั้งค่าให้:
DEFAULT CURRENT_TIMESTAMP- ตั้งค่าเริ่มต้นเป็นเวลาปัจจุบันเมื่อ INSERTON UPDATE CURRENT_TIMESTAMP- อัปเดตเป็นเวลาปัจจุบันเมื่อ UPDATE แถวนั้น
Syntax
ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
ตัวอย่างการใช้งาน
สร้างตารางนักเรียน (ยังไม่มี Timestamp Auto):
mysql> CREATE TABLE DemoTable737 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100),
StudentAdmissiondate DATETIME
);
Query OK, 0 rows affected (0.68 sec)
ปรับเปลี่ยนคอลัมน์ ให้เป็น Timestamp Auto:
mysql> ALTER TABLE DemoTable737 MODIFY COLUMN StudentAdmissiondate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; Query OK, 0 rows affected (2.20 sec)
ตรวจสอบโครงสร้าง (เห็น Default และ On Update):
mysql> DESC DemoTable737;
+----------------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +----------------------+--------------+------+-----+-------------------+-----------------------------+ | StudentId | int(11) | NO | PRI | NULL | auto_increment | | StudentName | varchar(100) | YES | | NULL | | | StudentAdmissiondate | timestamp | YES | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +----------------------+--------------+------+-----+-------------------+-----------------------------+ 3 rows in set (0.01 sec)
การทดสอบการทำงาน
-- INSERT: จะตั้งค่า StudentAdmissiondate = NOW() อัตโนมัติ
INSERT INTO DemoTable737 (StudentName) VALUES ('Test Student');
-- UPDATE: จะอัปเดต StudentAdmissiondate = NOW() อัตโนมัติ
UPDATE DemoTable737 SET StudentName = 'Updated' WHERE StudentId = 1;
ตัวเลือกการตั้งค่า (MySQL 5.6.5+ รองรับ DATETIME ด้วย)
| Default | On Update | พฤติกรรม |
|---|---|---|
| CURRENT_TIMESTAMP | CURRENT_TIMESTAMP | Set on INSERT, Update on UPDATE |
| CURRENT_TIMESTAMP | (none) | Set on INSERT only |
| (none) / 0 | CURRENT_TIMESTAMP | Update on UPDATE only |
| '2000-01-01' | CURRENT_TIMESTAMP | Default คงที่, Update Auto |