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

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


当前回答

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

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

其他回答

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

也就是说,您可以通过创建触发器来实现这一点。

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

对于那些试图在MySQL中设置默认DATETIME值而失去信心的人,我确切地知道你的感受。这就是:

ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

仔细观察,我没有在0周围添加单引号/双引号

解完这个题,我真的跳了起来,D

MySQL 5.6已经修复了这个问题。

ALTER TABLE mytable CHANGE mydate datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP'

使用以下代码

DELIMITER $$

    CREATE TRIGGER bu_table1_each BEFORE UPDATE ON table1 FOR EACH ROW
    BEGIN
      SET new.datefield = NOW();
    END $$

    DELIMITER ;

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