Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中将默认值更改为子查询_Mysql_Database_Default - Fatal编程技术网

在mysql中将默认值更改为子查询

在mysql中将默认值更改为子查询,mysql,database,default,Mysql,Database,Default,我想做的是,我想更改列属性,并为某个列关联一个默认值,该值将来自子查询。基本上,timeOfCreation的默认值应该是子查询-->(select NOW())。但是由于某种原因,它返回了一个语法错误,我不理解。这是我输入的命令 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SE

我想做的是,我想更改列属性,并为某个列关联一个默认值,该值将来自子查询。基本上,timeOfCreation的默认值应该是子查询-->(select NOW())。但是由于某种原因,它返回了一个语法错误,我不理解。这是我输入的命令

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';



ALTER TABLE `horizon`.`articles` CHANGE COLUMN `timeOfCreation` `timeOfCreation` DATETIME NULL DEFAULT (select NOW())  ;



 SQL_MODE=@OLD_SQL_MODE;

    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
错误是:

Executing SQL script in server

ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select NOW())' at line 1





ALTER TABLE `horizon`.`articles` CHANGE COLUMN `timeOfCreation` `timeOfCreation` DATETIME NULL DEFAULT (select NOW())  



SQL script execution finished: statements: 3 succeeded, 1 failed

另外,我使用workbench作为软件,但我认为这无关紧要。

默认值必须是常量,不能是表达式或查询。有一个例外,恰好是您需要的情况:TIMESTAMP或DATETIME列可以使用
CURRENT\u TIMESTAMP
作为其默认值

ALTER TABLE `horizon`.`articles` MODIFY COLUMN `timeOfCreation` DATETIME NULL DEFAULT CURRENT_TIMESTAMP  ;

明亮的现在它起作用了。我所做的是,我使用了CURRENT_TIMESTAMP作为默认值,并将列类型更改为TIMESTAMP。出于某种原因,如果我将其保留为datetime,它将显示“invailid value”错误。谢谢。MySQL 5.6将其扩展到DATETIME,在此之前,它只适用于时间戳。如果这是解决方案,为什么你不接受答案?对不起,我的错:)我对这个网站很陌生,我会学到一些东西。我想我必须投票赞成正确的答案,但我不能这样做。现在我接受了你的回答