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

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


当前回答

我运行MySql服务器5.7.11和这句话:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

不起作用。但下面是:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

只是工作。

作为旁注,mysql文档中提到:

DATE类型用于有日期部分但没有时间部分的值。MySQL以'YYYY-MM-DD'格式检索并显示DATE值。支持的范围为1000-01-01 ~ 99999-12-31。

即使他们还说:

无效的DATE、DATETIME或TIMESTAMP值被转换为适当类型的“零”值('0000-00-00'或'0000-00-00 00:00:00')。

其他回答

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的默认值

我认为在mysql中很简单,因为mysql的内置函数称为now(),它给出当前时间(插入的时间)。

因此,您的查询应该类似

CREATE TABLE defaultforTime(
    `creation_time`     DATETIME DEFAULT CURRENT_TIMESTAMP,
    `modification_time` DATETIME default now()
);

谢谢你!

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

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

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

MySQL 5.5

对于所有使用TIMESTAMP列作为解决方案的人,我想从手册中提出以下限制:

http://dev.mysql.com/doc/refman/5.0/en/datetime.html

TIMESTAMP数据类型的范围是'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。它具有不同的属性,这取决于MySQL版本和服务器运行的SQL模式。这些属性将在本节后面描述。”

这显然会在28年内破坏你的软件。

我认为数据库方面的唯一解决方案是使用其他答案中提到的触发器。

与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;