mysql 默认date,关于mysql:CURRENT_DATE / CURDATE()不能作为默认DATE值

非常直截了当的问题,我认为这应该可行,但事实并非如此。 为什么不呢?

这个问题已经过时了。 较新的版本允许这样。 有关版本号及其发布日期,请参见我的答案。 也就是说,更新可能是您的答案。

因为不支持,所以它不起作用

The DEFAULT clause specifies a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE. The exception is that you can specify CURRENT_TIMESTAMP as the default for a TIMESTAMP column

http://dev.mysql.com/doc/refman/5.5/en/create-table.html

是否可以将时间戳记值格式化为仅日期?

@inControl:是的,使用DATE_FORMAT

它的2016年以及老实说仍然如此,这是荒谬的。我认为恒定同义词的全部原因是允许它们在禁止非恒定表达式的地方使用。

@NorthbornDesign我通过迁移到postgresql解决了自己的问题:-)

请注意@NorthbornDesign的答案是正确的:)

对于change_date列(更新和删除):CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html

将日期列声明为NOT NULL,但没有默认值。然后添加此触发器:

USE `ddb`;

DELIMITER $$

CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW

if ( isnull(new.query_date) ) then

set new.query_date=curdate();

end if;

$$

delimiter ;

我必须将字段设置为NULL才能进行此工作,否则它将插入0000-00-00。 MySQL v5.6.12。

(MySQL 5.7)

----- 2016-07-04 MariaDB 10.2.1-发行说明------

支持带有表达式的DEFAULT(MDEV-10134)。

----- 2018-10-22 8.0.13一般可用性-------

MySQL现在支持使用表达式作为数据类型规范中的默认值。这包括将表达式用作BLOB,TEXT,GEOMETRY和JSON数据类型的默认值,以前根本无法为其分配默认值。有关详细信息,请参见数据类型默认值。

正如其他答案正确指出的那样,您不能将动态函数用作默认值。您可以将TIMESTAMP与CURRENT_TIMESTAMP属性一起使用,但这并不总是可能的,例如,如果您想同时保留创建和更新的时间戳,并且第二秒钟只需要允许的TIMESTAMP列。

在这种情况下,请改用触发器。

在MySQL 5.6中取消了对自动时间戳记数量的限制。

感谢您的补充,没有意识到-仍然要牢记,因为大多数虚拟主机仍处于5.1或5.5。

MariaDB 10.2.1允许DEFAULT(expression)。请参阅创建表。

您应该添加一个答案@RickJames

根据该文档,从MySQL 8.0.13开始,您将能够指定:

不幸的是,到今天为止,该版本尚未发布。您可以在此处查看最新更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值