如何用单条MySQL语句批量递增JSON数组中的product_id数值
批量更新MySQL JSON数组中的所有元素值
可以用单条UPDATE语句完成这个批量操作,前提是你的MySQL版本是8.0及以上(依赖JSON_TABLE和JSON_ARRAYAGG这两个JSON处理函数)。
执行更新的语句
UPDATE your_table_name SET product_ids = ( SELECT JSON_ARRAYAGG(product_id + 1127) FROM JSON_TABLE( product_ids, '$[*]' COLUMNS(product_id INT PATH '$') ) AS jt );
语句解释
JSON_TABLE(product_ids, '$[*]' COLUMNS(product_id INT PATH '$')):把product_ids列的JSON数组拆分成临时表jt,每个数组元素作为一行的product_id字段。product_id + 1127:对拆分后的每个product_id执行递增1127的操作。JSON_ARRAYAGG(...):把处理后的所有product_id重新聚合成JSON数组。- 外层
UPDATE将原product_ids字段替换为新生成的JSON数组。
安全验证建议
在执行更新前,先运行以下查询确认结果是否符合预期:
SELECT user_id, product_ids AS original_product_ids, (SELECT JSON_ARRAYAGG(product_id + 1127) FROM JSON_TABLE(product_ids, '$[*]' COLUMNS(product_id INT PATH '$')) AS jt) AS updated_product_ids FROM your_table_name;
确认所有元素都正确递增后,再执行上面的UPDATE语句。
注意事项
- 替换语句中的
your_table_name为你的实际表名。 - 如果你的MySQL版本低于8.0,由于缺少
JSON_TABLE函数,无法用这种简洁的方式处理,可能需要结合字符串函数或临时表,但效率会低于8.0的方案。
内容的提问来源于stack exchange,提问作者Ravindra
相关产品推荐
相关产品推荐

