将NOW()设置为datetime数据类型的默认值?

15 浏览
0 Comments

将NOW()设置为datetime数据类型的默认值?

我在用户表中有两列,分别是“registerDate”和“lastVisitDate”,它们都是datetime数据类型。我想要做以下操作:

  1. 将“registerDate”设置为MySQL的NOW()默认值
  2. 将“lastVisitDate”设置为0000-00-00 00:00:00,而不是默认的null值

由于表已经存在并且有现有记录,我想使用修改表的方式来实现。我已经尝试使用下面两段代码,但都不起作用。

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

它给我返回错误:ERROR 1067 (42000): Invalid default value for 'registerDate'

在MySQL中,我是否可以将默认的datetime值设置为NOW()?

0
0 Comments

问题的原因是用户想要将datetime数据类型的默认值设置为当前时间。解决方法是通过使用SQL语句来修改表的列属性,将该列的数据类型修改为TIMESTAMP,并设置NOT NULL约束和DEFAULT CURRENT_TIMESTAMP属性。

以下是修改表的SQL语句示例:

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

推荐使用SQLYog或类似工具来执行这个SQL语句,因为这些工具提供了简单易用的界面。

需要注意的是,这个解决方法仅适用于TIMESTAMP列,而不是DATETIME列。

另外,如果用户只想显示日期部分,可以使用DATE函数或类似的函数来提取日期部分并进行显示。

0
0 Comments

问题的原因是作者想要在插入新记录时将datetime字段设置为当前时间(NOW()),并且希望在更新记录时也能够实现相同的功能。为了解决这个问题,作者使用了一个触发器(trigger)的方法来实现。触发器的代码如下:

CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW()

这个触发器会在每次插入新记录之前执行,并且将datetime字段设置为当前时间。

在这个问题的回答中,Johan和Leonardo提到了使用转换为timestamp字段的方法。虽然这对于问题中提到的用例(存储RegisterDate和LastVisitDate)可能可行,但它并不是一个通用的解决方案。所以应该注意datetime和timestamp之间的区别。关于datetime和timestamp的比较,可以参考stackoverflow上的问题:datetime vs timestamp

虽然这个回答是正确的,但是应该明确指出它适用于datetime字段。原始提问者想要解决的是datetime字段的问题,并且使用timestamp只是一个愚蠢的变通方法,如果你真正了解这两种数据类型的区别的话。

0
0 Comments

从上述内容可以得出(Set NOW() as Default Value for datetime datatype?)这个问题的出现原因是在MySQL 5.6.5之前,无法直接将NOW()函数设置为datetime字段的默认值,只能使用timestamp类型,并且每个表只能有一个自动更新的timestamp字段。解决方法是在MySQL 5.6.5及以后的版本中,可以直接使用datetime类型,并将DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP两个规则结合起来,实现自动更新的功能。如果不想在UPDATE时更新timestamp值,可以将字段定义为DEFAULT CURRENT_TIMESTAMP。

0