คำสั่งสร้างตารางพร้อม TIMESTAMP
CREATE TABLE demo50 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
start_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
end_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);
INSERT ข้อมูลทดสอบ
-- ทั้งคู่ใช้ DEFAULT
INSERT INTO demo50 VALUES ();
-- ระบุแค่ end_date
INSERT INTO demo50 (end_date) VALUES ('2020-12-21');
-- ระบุแค่ start_date
INSERT INTO demo50 (start_date) VALUES ('2020-01-01');
ผลลัพธ์ (สมมติรันเมื่อ 2020-11-04 20:54:31)
+----+---------------------+---------------------+
| id | start_date | end_date |
+----+---------------------+---------------------+
| 1 | 2020-11-04 20:54:31 | 2020-11-04 20:54:31 |
| 2 | 2020-11-04 20:54:53 | 2020-12-21 00:00:00 |
| 3 | 2020-01-01 00:00:00 | 2020-11-04 20:55:04 |
+----+---------------------+---------------------+
พฤติกรรม TIMESTAMP สำคัญ
| สถานการณ์ | start_date | end_date |
| INSERT ไม่ระบุค่า | CURRENT_TIMESTAMP | CURRENT_TIMESTAMP |
| ระบุแค่ end_date | CURRENT_TIMESTAMP (ตอน INSERT) | ค่าที่ระบุ |
| ระบุแค่ start_date | ค่าที่ระบุ | CURRENT_TIMESTAMP (ตอน INSERT) |
| UPDATE แถว (ไม่ระบุคอลัมน์) | คงเดิม | อัปเดตเป็น CURRENT_TIMESTAMP ⚠️ |
ควบคุมการอัปเดตอัตโนมัติ
1. ไม่อัปเดตอัตโนมัติ: ใช้ DATETIME
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
2. อัปเดตเฉพาะตอน UPDATE: ใช้ ON UPDATE
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
3. ไม่ให้ DEFAULT: ระบุ NULL หรือค่าเฉพาะ
explicit_date TIMESTAMP NULL DEFAULT NULL
TIMESTAMP vs DATETIME
| คุณสมบัติ | TIMESTAMP | DATETIME |
| ช่วงปี | 1970-2038 (32-bit) | 1000-9999 |
| Timezone | แปลงเป็น UTC จัดเก็บ, แปลงกลับตอนอ่าน | จัดเก็บตามที่ใส่ (no conversion) |
| DEFAULT CURRENT_TIMESTAMP | รองรับ | รองรับ (MySQL 5.6.5+) |
| ON UPDATE CURRENT_TIMESTAMP | รองรับ | รองรับ (MySQL 5.6.5+) |
| ขนาดจัดเก็บ | 4 ไบต์ | 5 ไบต์ (MySQL 5.6.4+) / 8 ไบต์ (เก่า) |
แนะนำ: ใช้ DATETIME สำหรับแอปพลิเคชันทั่วไป
TIMESTAMP เหมาะสำหรับ metadata (created_at, updated_at) ที่ต้องการ timezone conversion อัตโนมัติ