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

สร้างตาราง MySQL พร้อมฟิลด์ TIMESTAMP

คำสั่งสร้างตารางพร้อม 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_dateend_date
INSERT ไม่ระบุค่าCURRENT_TIMESTAMPCURRENT_TIMESTAMP
ระบุแค่ end_dateCURRENT_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

คุณสมบัติTIMESTAMPDATETIME
ช่วงปี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 อัตโนมัติ