mysql 有列 ban 字段 json 数组数据 [{"type": 1, "banTime": 1000}, {"type": 2, "banTime": 2000}] , 我想更新json 字 数组里 type = 1 的数据
时间: 2023-11-18 16:04:55 浏览: 123
centos下fail2ban安装与配置详解
要更新MySQL中JSON数组中type等于1的数据,可以使用JSON函数和UPDATE语句。下面是一个示例的更新操作:
```sql
UPDATE your_table
SET ban = JSON_SET(ban,
CONCAT('$[',
(SELECT JSON_UNQUOTE(JSON_SEARCH(ban, 'one', '1', NULL, '$[*].type'))
FROM your_table
WHERE JSON_CONTAINS(ban, '{"type": 1}', '$[*]')),
']'),
JSON_SET(
JSON_EXTRACT(ban,
CONCAT('$[',
(SELECT JSON_UNQUOTE(JSON_SEARCH(ban, 'one', '1', NULL, '$[*].type'))
FROM your_table
WHERE JSON_CONTAINS(ban, '{"type": 1}', '$[*]')),
']')
)
),
'$.banTime',
'new_value'
)
WHERE JSON_CONTAINS(ban, '{"type": 1}', '$[*]');
```
在这个示例中,`your_table`是要更新的表名,`ban`是包含JSON数组的字段名。
首先,使用`JSON_CONTAINS`函数检查JSON数组中是否存在type等于1的元素。然后,使用`JSON_SEARCH`函数查找该元素对应的路径。
接下来,使用`JSON_SET`函数更新对应元素的属性值。`CONCAT('$[', ...)`用于构建要更新的元素路径。`JSON_EXTRACT`函数用于获取要更新的元素的原始值,然后将其传递给`JSON_SET`函数进行更新。最后,通过第四个参数指定要更新的属性名称和新值。
最后,通过WHERE子句筛选出包含type等于1的元素进行更新。
请注意,这个示例假设你的JSON数组中每个元素都是对象,并且每个对象都有一个名为`type`的属性。如果你的JSON结构与此不同,请适当修改条件和更新的属性值。
阅读全文