在mysql中将默认值更改为子查询
我想做的是,我想更改列属性,并为某个列关联一个默认值,该值将来自子查询。基本上,timeOfCreation的默认值应该是子查询-->(select NOW())。但是由于某种原因,它返回了一个语法错误,我不理解。这是我输入的命令在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
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,在此之前,它只适用于时间戳。如果这是解决方案,为什么你不接受答案?对不起,我的错:)我对这个网站很陌生,我会学到一些东西。我想我必须投票赞成正确的答案,但我不能这样做。现在我接受了你的回答