CHỈNH SỬA QUAN TRỌNG: Hiện có thể đạt được điều này với các trường DATETIME kể từ MySQL 5.6.5 , hãy xem bài đăng khác dưới đây ...
Các phiên bản trước không thể làm điều đó với DATETIME ...
Nhưng bạn có thể làm điều đó với TIMESTAMP:
mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
+-------+-------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+-------------------+-------+
| str | varchar(32) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------+-------------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)
mysql> insert into test (str) values ("demo");
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+---------------------+
| str | ts |
+------+---------------------+
| demo | 2008-10-03 22:59:52 |
+------+---------------------+
1 row in set (0.00 sec)
mysql>
CAVEAT: NẾU bạn xác định một cột với CURRENT_TIMESTAMP BẬT làm mặc định, bạn sẽ phải LUÔN chỉ định một giá trị cho cột này hoặc giá trị sẽ tự động đặt lại thành "bây giờ ()" khi cập nhật. Điều này có nghĩa là nếu bạn không muốn giá trị thay đổi, câu lệnh CẬP NHẬT của bạn phải chứa "[tên cột của bạn] =[tên cột của bạn]" (hoặc một số giá trị khác) hoặc giá trị sẽ trở thành "bây giờ ()". Kỳ lạ, nhưng đúng. Tôi đang sử dụng 5.5.56-MariaDB