MySQL 操作JSON

1. 插入JSON数据

INSERT INTO your_table (json_column) VALUES ('{"key": "value", "number": 456}');

2. 查询JSON字段

获取JSON字段的值
  • 使用->操作符获取JSON对象的值(作为JSON格式返回)
SELECT json_column->"$.key" FROM your_table;
  • 使用->>操作符获取JSON对象的值(作为文本返回)
SELECT json_column->>"$.key" FROM your_table;
提取JSON数组中的元素
SELECT json_column->"$.array[0]" FROM your_table; -- 获取数组的第一个元素

3. 修改JSON数据

MySQL没有直接的UPDATE语句来修改JSON对象中的某个值,但你可以使用JSON_SET()JSON_REPLACE()JSON_INSERT(), 和 JSON_REMOVE()等函数来更新JSON列。

  • JSON_SET():插入或更新数据
UPDATE your_table  
SET json_column = JSON_SET(json_column, '$.key', 'newValue')  
WHERE condition;
  • JSON_REPLACE():只替换已存在的值
UPDATE your_table  
SET json_column = JSON_REPLACE(json_column, '$.key', 'replacedValue')  
WHERE condition;
  • JSON_INSERT():只插入不存在的值
UPDATE your_table  
SET json_column = JSON_INSERT(json_column, '$.newKey', 'newValue')  
WHERE condition;
  • JSON_REMOVE():从JSON文档中删除数据
UPDATE your_table  
SET json_column = JSON_REMOVE(json_column, '$.keyToRemove')  
WHERE condition;

4. 搜索JSON数据

  • 使用JSON_CONTAINS()检查JSON文档是否包含特定值
SELECT * FROM your_table  
WHERE JSON_CONTAINS(json_column, '"searchValue"', '$.path');
  • 使用JSON_SEARCH()查找JSON文档中的路径
SELECT JSON_SEARCH(json_column, 'one', 'searchValue') FROM your_table;

5. JSON数组操作

  • 使用JSON_ARRAY()创建JSON数组
SET @json_array = JSON_ARRAY('a', 1, NOW());
  • 使用JSON_APPEND()向JSON数组添加元素
UPDATE your_table  
SET json_column = JSON_APPEND(json_column, '$.array', 'newValue')  
WHERE condition;

### 如何在 MySQL操作 JSON 字符串 #### 插入 JSON 数据 为了向表中插入 JSON 数据,可以使用 `INSERT` 或者 `UPDATE` 语句来设置列中的 JSON 值。假设有一个名为 `snapshots` 的表,其中有一列表示快照信息并被定义为 `JSON` 类型。 ```sql CREATE TABLE snapshots ( id INT AUTO_INCREMENT PRIMARY KEY, info JSON NOT NULL ); ``` 要插入一条记录: ```sql INSERT INTO snapshots(info) VALUES ('{"name": "snapshot_1", "date": "2023-09-08"}'); ``` 也可以通过编程语言(比如PHP)连接到MySQL并将数据作为参数传递给预处理语句[^3]。 #### 查询 JSON 数据 当需要检索特定部分的数据时,可利用路径表达式从 JSON 文档内提取所需的信息。例如获取所有名字等于 `"snapshot_1"` 的条目: ```sql SELECT * FROM snapshots WHERE JSON_UNQUOTE(JSON_EXTRACT(info, '$.name')) = 'snapshot_1'; ``` 对于更复杂的查询条件,还可以考虑使用 `->>` 运算符简化语法: ```sql SELECT * FROM snapshots WHERE info->>'$.name' = 'snapshot_1'; ``` 这会返回满足该条件的所有行[^1]。 #### 更新 JSON 数据 如果想要修改已存在的 JSON 对象内的某个字段,则可以通过 `JSON_SET()` 函数完成此操作。下面的例子展示了怎样把 ID 为 1 的那条记录里的日期改成新的值: ```sql UPDATE snapshots SET info = JSON_SET(info, '$.date', '2023-10-07') WHERE id=1; ``` 另外还有其他类似的函数如 `JSON_REPLACE()`, 它们之间的区别在于对待不存在键的方式不同——前者会在找不到指定位置的情况下创建新节点而后者不会做任何改变[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值