【问题标题】:Add Column with Default value from existing JSON Column从现有 JSON 列添加具有默认值的列
【发布时间】:2021-01-17 00:09:13
【问题描述】:

我有一个名称为 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 版本。显示准确的 GDN_AUDIT_TRAILCREATE TABLE 脚本。
  • 请同时包含您收到的错误。欢迎使用 Stack Overflow!

标签: mysql sql json string alter-table


【解决方案1】:

您需要将默认给出的表达式用括号括起来,以便 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 子句中指定的默认值必须是文字常量;它不能是函数或表达式。

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多