如何解决从现有JSON列添加具有默认值的列
我有一个名称为 GDN_AUDIT_TRAIL 的表,该表具有名称为
的JSON列详细信息。
我想在此表中添加新列SOLUTION_ID,以便此列的默认值应为DETAILS JSON列中的字段之一。 我试过下面给出错误的查询-
ALTER TABLE GDN_AUDIT_TRAIL
ADD COLUMN SOLUTION_ID VARCHAR(50) DEFAULT JSON_UNQUOTE(JSON_EXTRACT(DETAILS,'$.solutionID')) AFTER ACTION_TYPE;
如果可以的话,请告诉我。
解决方法
您需要将默认的表达式用括号括起来,以便MySQL正确理解:
alter table gdn_audit_trail
add column solution_id varchar(50)
default (json_unquote(json_extract(details,'$.SolutionID'))) after action_type;
-- ^ -- -- ^ --
请注意,在DEFAULT
子句中使用表达式需要MySQL 8.0.13。在早期版本中,仅允许使用文字常量(current_timestamp
是唯一的例外)。这是well explained in the documentation:
自MySQL 8.0.13起的显式默认值处理
在
DEFAULT
子句中指定的默认值可以是文字常量或表达式。除了一个例外,将表达式默认值放在括号内,以将它们与文字常量默认值区分开。[...]
MySQL 8.0.13之前的显式默认值处理
有一个例外,
DEFAULT
子句中指定的默认值必须为文字常量;它不能是函数或表达式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。