如果我有一个调用了JSON列的MySQL表,numbers并且[1, 2, 3]该列中有一个记录(整数数组),那么如何更新该记录以删除2(所以它变成了[1, 3])?
我正在寻找一个自己的答案,来到这个问题,不想使用我继续搜索的对象.但是,我发现了一个解决方案,你需要使用的组合json_remove和json_search
以下内容从表tbl和列中删除值1numbers
UPDATE tbl
SET numbers = JSON_REMOVE(
numbers, replace(json_search(numbers, 'one', 1), '"', '')
)
WHERE json_search(numbers, 'one', 1) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
json_search 返回值的路径,即. "$[0]"replace删除"否则将发生错误json_removejson_remove将从json_search结果中删除路径瞧,你的价值被删除了.
注意:这假定没有重复值
在有人找到更好的解决方案之前,我只是将其转换为对象:{"1": 1, "2": 2, "3": 3}.是的,这更加丑陋并占用更多的磁盘空间,但您可以获得不必担心重复的好处.
要添加数字:
update tbl set numbers = json_insert(`numbers`, '$."4"', 4);
Run Code Online (Sandbox Code Playgroud)
要删除一个数字:
update tbl set numbers = json_remove(`numbers`, '$."4"');
Run Code Online (Sandbox Code Playgroud)
获取具有特定数字的行:
select * from tbl where json_contains_path(`numbers`, 'one', '$."4"');
Run Code Online (Sandbox Code Playgroud)