微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从现有JSON列添加具有默认值的列

如何解决从现有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 举报,一经查实,本站将立刻删除。