非常直截了当的问题,我认为这应该可行,但事实并非如此。 为什么不呢?
这个问题已经过时了。 较新的版本允许这样。 有关版本号及其发布日期,请参见我的答案。 也就是说,更新可能是您的答案。
因为不支持,所以它不起作用
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开始,您将能够指定:
不幸的是,到今天为止,该版本尚未发布。您可以在此处查看最新更新。