如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
如何设置MySQL Datetime列的默认值?
在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。
当前回答
重要的编辑: 自从MySQL 5.6.5以来,现在可以用DATETIME字段实现这一点,看看下面的其他帖子…
以前的版本不能这样做的DATETIME…
但是你可以用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>
注意:如果你定义了一个默认值为CURRENT_TIMESTAMP ON的列,你需要为这个列指定一个ALWAYS值,否则这个值会在更新时自动重置为"now()"。这意味着如果你不想改变这个值,你的UPDATE语句必须包含"[你的列名]=[你的列名]"(或其他值),否则这个值就会变成"now()"。很奇怪,但却是事实。我使用的是5.5.56-MariaDB
其他回答
您可以使用now()来设置datetime列的值,但请记住,不能将其用作默认值。
与MySQL 8.x工作良好
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
`dateUpdated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `mobile_UNIQUE` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
在版本5.6.5中,可以在datetime列上设置默认值,甚至可以使列在行更新时更新。类型定义:
CREATE TABLE foo (
`creation_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`modification_time` DATETIME ON UPDATE CURRENT_TIMESTAMP
)
参考: http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html
如果已经创建了表,则可以使用
更改默认值为当前日期时间
ALTER TABLE <TABLE_NAME>
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
修改默认值为'2015-05-11 13:01:01'
ALTER TABLE <TABLE_NAME>
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT '2015-05-11 13:01:01';
MySQL 5.6已经修复了这个问题。
ALTER TABLE mytable CHANGE mydate datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP'