协慌网

登录 贡献 社区

如何为 MySQL Datetime 列设置默认值?

如何为 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>

** CAVEAT:如果您默认定义 CURRENT_TIMESTAMP 为 ON 的列,则需要始终为此列指定值,否则该值将在更新时自动重置为 “now()”。这意味着如果您不希望更改该值,则您的 UPDATE 语句必须包含 “[您的列名] = [您的列名]”(或其他一些值),否则该值将变为 “now()”。很奇怪,但也是如此。我希望这有帮助。我使用的是 5.5.56-MariaDB **

在 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

MySQL( 版本 5.6.5 之前 )不允许将函数用于默认的 DateTime 值。 TIMESTAMP 由于其奇怪的行为而不适用,因此不建议用作输入数据。 (请参阅MySQL 数据类型默认值 。)

也就是说,您可以通过创建触发器来实现此目的。

我有一个 DateTime 类型的 DateCreated 字段的表。我在该表 “Before Insert” 和 “ SET NEW.DateCreated=NOW() ” 上创建了一个触发器,它工作得很好。

我希望这有助于某人。