[MySQL]MySQL数据库中如何为日期类型(Datetime)的字段(列)设置当前时间为默认值?
问题描述
如题,在MySQL数据库中,如何为日期类型(Datetime)的字段(列)设置当前时间为默认值?
我们知道,在SQL Server数据库中,可以使用 GETDATE() 函数来设置某个字段(列)的默认当前时间,那么,在MySQL数据库如何实现呢?
方案一
在MySQL 5.6.5 版本的数据库中,可以使用 CURRENT_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>
方案二
甚至,你还可以为更新时的列设置当前更新时间,具体SQL语句如下:
CREATE TABLE foo (
`creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)
方案三
除了使用 CURRENT_TIMESTAMP 关键字外,我们还可以使用 TRIGGER 触发器来设置,具体SQL语句示例:
CREATE TABLE `MyTable` (
`MyTable_ID` int UNSIGNED NOT NULL AUTO_INCREMENT ,
`MyData` varchar(10) NOT NULL ,
`CreationDate` datetime NULL ,
`UpdateDate` datetime NULL ,
PRIMARY KEY (`MyTable_ID`)
)
;
CREATE TRIGGER `MyTable_INSERT` BEFORE INSERT ON `MyTable`
FOR EACH ROW BEGIN
-- Set the creation date
SET new.CreationDate = now();
-- Set the udpate date
Set new.UpdateDate = now();
END;
CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
-- Set the udpate date
Set new.UpdateDate = now();
END;
方案四
当我们为已经存在的数据表字段(列)设置默认值为当前时间时,可以使用如下SQL语句:
ALTER TABLE mytable CHANGE mydate datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP'