错误[42000][1064]生成的虚拟列



我尝试用表达式更新生成的列。它在select

中起作用
select from_unixtime(CONCAT(LEFT(jdoc->'$.ts', LENGTH(jdoc->'$.ts') - CHAR_LENGTH(jdoc->'$.sts')), jdoc->'$.sts'))  as calc_ts
from table_name

但是当我修改表

时它不起作用
alter table table_name
alter column sts_date set default from_unixtime(
CONCAT(LEFT(jdoc -> '$.ts', LENGTH(jdoc -> '$.ts') - CHAR_LENGTH(jdoc -> '$.sts')), jdoc -> '$.sts') /
1000);

返回错误:

[42000][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 'from_unixtime( CONCAT(LEFT(jdoc -> '$.ts', LENGTH(jdoc -> '$.ts'' at line 2.

有什么不对的?

首先,MySQL 5.7不支持DEFAULT子句的表达式。该特性是MySQL 8.0.13的新特性。阅读这里:https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html如果你还在使用MySQL 5.7,你将不得不升级以获得此功能。

第二,表达式默认值需要额外的一对括号。

错:

DEFAULT expr

:

DEFAULT (expr)

注意语法参考显示了括号:

column_definition: {
data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]
^    ^

最新更新