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

ใช้ DEFAULT CURRENT_TIMESTAMP และ ON UPDATE CURRENT_TIMESTAMP ใน MySQL

การตั้งค่า Timestamp อัตโนมัติ: สร้างและอัปเดตอัตโนมัติ

คอลัมน์ TIMESTAMP (หรือ DATETIME ใน MySQL 5.6.5+) สามารถตั้งค่าให้:

  • DEFAULT CURRENT_TIMESTAMP - ตั้งค่าเริ่มต้นเป็นเวลาปัจจุบันเมื่อ INSERT
  • ON 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 ด้วย)

ข้อควรระวัง

  • ตารางละ **1 คอลัมน์ TIMESTAMP** เท่านั้นที่รองรับ Auto Properties (MySQL < 5.6.5)
  • MySQL 5.6.5+ รองรับหลายคอลัมน์ และรองรับ DATETIME ด้วย
  • TIMESTAMP ช่วง 1970-2038, DATETIME ช่วง 1000-9999
  • Timezone: TIMESTAMP แปลง UTC ↔ Session TZ, DATETIME ไม่แปลง
  • Explicit Value ใน INSERT/UPDATE จะ Override Auto Behavior
DefaultOn Updateพฤติกรรม
CURRENT_TIMESTAMPCURRENT_TIMESTAMPSet on INSERT, Update on UPDATE
CURRENT_TIMESTAMP(none)Set on INSERT only
(none) / 0CURRENT_TIMESTAMPUpdate on UPDATE only
'2000-01-01'CURRENT_TIMESTAMPDefault คงที่, Update Auto