บทความนี้อธิบายชนิดข้อมูล TIMESTAMP ใน MySQL และวิธีเปลี่ยนคอลัมน์ DATETIME ให้เป็น TIMESTAMP พร้อมตั้งค่า DEFAULT CURRENT_TIMESTAMP
สร้างตารางและแก้ไขคอลัมน์
mysql> CREATE TABLE DemoTable662(
UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName VARCHAR(100),
UserPostDate DATETIME
);
Query OK, 0 rows affected (0.50 sec)
mysql> ALTER TABLE DemoTable662
MODIFY COLUMN UserPostDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
Query OK, 0 rows affected (1.81 sec)
โครงสร้างตารางหลังแก้ไข
+--------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+-------------------+----------------+
| UserId | int(11) | NO | PRI | NULL | auto_increment |
| UserName | varchar(100) | YES | | NULL | |
| UserPostDate | timestamp | NO | | CURRENT_TIMESTAMP | |
+--------------+--------------+------+-----+-------------------+----------------+
เพิ่มข้อมูลทดสอบ
mysql> INSERT INTO DemoTable662(UserName) VALUES('Chris');
mysql> INSERT INTO DemoTable662(UserName) VALUES('Robert');
mysql> INSERT INTO DemoTable662(UserName, UserPostDate) VALUES('Robert', '2018-01-11');
ผลลัพธ์
+--------+----------+---------------------+
| UserId | UserName | UserPostDate |
+--------+----------+---------------------+
| 1 | Chris | 2019-07-20 13:06:13 |
| 2 | Robert | 2019-07-20 13:06:18 |
| 3 | Robert | 2018-01-11 00:00:00 |
+--------+----------+---------------------+
จุดสำคัญ:
TIMESTAMP- เก็บวันที่+เวลา ช่วง 1970-01-01 ถึง 2038-01-19DEFAULT CURRENT_TIMESTAMP- ตั้งค่าอัตโนมัติเมื่อ INSERT โดยไม่ระบุค่า- แถวที่ 3 ระบุ UserPostDate เอง จึงใช้ค่าที่กำหนดแทนค่าเริ่มต้น
- ต่างจาก
DATETIMEที่ช่วงกว้างกว่า (1000-9999) แต่ไม่มี Auto-update feature