从现有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子句中指定的默认值必须为文字常量;它不能是函数或表达式。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...