MySQL:更新 JSON 数组中 JSON 对象的特定 属性 值

MySQL: update specific property value of a JSON object in a JSON Array

我有 MySQL 数据库,其中 table 有一个 JSON 列。
列中的示例数据如下所示:
[{"id": 1, "value": 23.4}, {"id": 2, "value": 54.3}, {"id": 3, "value": 4.33}]

我想 update 列中所有对象的 属性 到 0.0(比方说)

我的尝试:
update table_name set json_col = JSON_SET(json_col, '$[*].value', 0.0);

来自 MySQL 的错误语句:
错误 3149 (42000):在这种情况下,路径表达式可能不包含 * 和 ** 标记。

我怎样才能使这项工作?

您不能执行多重更新。您必须更新递归 CTE 中的 one-by-one 值或 parse/replace/reconstruct:

UPDATE test
JOIN ( SELECT id, JSON_ARRAYAGG(JSON_REPLACE(object, '$.value', 0)) value
       FROM test
       CROSS JOIN JSON_TABLE( test.value,
                              '$[*]' COLUMNS (object JSON PATH '$')) jsontable
       GROUP BY id ) data_for_update USING (id)
SET test.value = data_for_update.value;

fiddle(有 step-by-step 解释)。