如何编写MariaDB JSON字段追加、编辑、删除记录的SQL查询语句?
前提说明
假设存储JSON数据的表名为your_table,JSON列名为resume_list,需要操作的行主键ID为1,所有示例均基于该假设,你可以根据实际场景替换对应字段名和条件。
追加JSON数组元素
使用MariaDB内置的JSON_ARRAY_APPEND函数实现新记录追加,示例:追加一条ID为310的新简历记录
UPDATE your_table SET resume_list = JSON_ARRAY_APPEND( resume_list, '$', JSON_OBJECT( 'id', 310, 'date_created', '2021-10-24', 'resume', 'mnopqrst' ) ) WHERE id = 1;
编辑JSON数组内的指定记录
已知数组下标时
比如要修改数组第1个元素(下标从0开始,$[0]对应ID为287的记录)的resume字段内容:
UPDATE your_table SET resume_list = JSON_REPLACE(resume_list, '$[0].resume', '修改后的简历内容') WHERE id = 1;
未知下标、按元素ID匹配修改时
比如要修改ID为300的记录的date_created字段值:
UPDATE your_table SET resume_list = JSON_REPLACE( resume_list, -- 匹配到id=300对应的date_created字段路径 REPLACE(JSON_UNQUOTE(JSON_SEARCH(resume_list, 'one', 300, NULL, '$[*].id')), '.id', '.date_created'), '2021-10-25' ) WHERE id = 1 AND JSON_CONTAINS(resume_list, JSON_OBJECT('id', 300));
删除JSON数组内的指定记录
已知数组下标时
比如删除数组第2个元素(下标$[1]对应ID为300的记录):
UPDATE your_table SET resume_list = JSON_REMOVE(resume_list, '$[1]') WHERE id = 1;
未知下标、按元素ID匹配删除时
比如删除ID为287的记录:
UPDATE your_table SET resume_list = JSON_REMOVE( resume_list, -- 匹配到id=287对应的元素根路径 REPLACE(JSON_UNQUOTE(JSON_SEARCH(resume_list, 'one', 287, NULL, '$[*].id')), '.id', '') ) WHERE id = 1 AND JSON_CONTAINS(resume_list, JSON_OBJECT('id', 287));
注意:以上JSON函数支持MariaDB 10.2.3及更高版本,执行UPDATE操作前建议先执行对应SELECT语句验证匹配结果,避免误改数据。
内容的提问来源于stack exchange,提问作者Mohammad Nadhir
相关产品推荐
相关产品推荐

