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

在SQL Server中是getdate()。MySQL的等价物是什么?我使用MySQL 5。X,如果它是因式。


当前回答

CREATE TABLE `testtable` (
    `id` INT(10) NULL DEFAULT NULL,
    `colname` DATETIME NULL DEFAULT '1999-12-12 12:12:12'
)

在上面的查询中创建'testtable',我使用'1999-12-12 12:12:12'作为DATETIME列colname的默认值

其他回答

您可以使用now()来设置datetime列的值,但请记住,不能将其用作默认值。

这确实是个可怕的消息。这里有一个长期悬而未决的bug/特性请求。该讨论还讨论了时间戳数据类型的限制。

我真的很想知道实现这个东西有什么问题。

如果你设置ON UPDATE CURRENT_TIMESTAMP,当表中的行数据更新时,它将占用当前时间。

 CREATE TABLE bar(
        `create_time` TIMESTAMP CURRENT_TIMESTAMP,
        `update_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )

对我来说,触发方法是最有效的,但我发现这种方法有一个障碍。考虑将date字段设置为insert的当前时间的基本触发器:

CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
    FOR EACH ROW SET NEW.dateAdded = NOW();

这通常很好,但如果你想通过INSERT语句手动设置字段,如下所示:

INSERT INTO tblMyTable(name, dateAdded) VALUES('Alice', '2010-01-03 04:30:43');

触发器会立即覆盖您为字段提供的值,因此设置非当前时间的唯一方法是后续的UPDATE语句——真糟糕!要在提供值时覆盖此行为,请尝试使用IFNULL操作符略微修改的触发器:

CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
    FOR EACH ROW SET NEW.dateAdded = IFNULL(NEW.dateAdded, NOW());

这提供了两个世界的最佳:您可以为日期列提供一个值,它将接受,否则它将默认为当前时间。相对于表定义中的DEFAULT GETDATE()之类的干净的东西,它仍然是ghetto,但我们越来越接近了!

虽然你不能在默认定义的DATETIME中这样做,你可以简单地在插入语句中合并一个选择语句,就像这样:

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

请注意,桌子周围没有引号。

MySQL 5.5