2025年01月16日 mysql json set 极客笔记
在MySQL中,有时候我们需要操作JSON数据类型的字段,比如添加、更新或删除JSON对象中的键值对。JSON_SET() 函数可以用来实现这些操作,它允许我们向现有JSON对象添加新的键值对,更新现有键的值,以及删除现有键值对。
JSON_SET(json_doc, path, val[, path, val]…)
假设我们有一个名为people
的表,其中有一个名为info
的JSON类型字段,存储了每个人的信息,格式如下:
CREATE TABLE people (
id INT PRIMARY KEY,
info JSON
);
INSERT INTO people (id, info) VALUES
(1, '{"name": "Alice", "age": 25, "city": "New York"}'),
(2, '{"name": "Bob", "age": 30, "city": "Los Angeles"}'),
(3, '{"name": "Charlie", "age": 35, "city": "Chicago"}');
现在,假设我们想要更新Alice
的信息,将age
更新为26
,并添加一个新的字段email
,可以使用JSON_SET()
函数来实现:
UPDATE people
SET info = JSON_SET(info, '.age', 26, '.email', 'alice@example.com')
WHERE id = 1;
运行上面的语句后,Alice
的信息会被更新,age
变为26
,并且email
字段被添加。查询people
表可以查看更新后的结果:
SELECT * FROM people;
结果如下:
| id | info |
|----|--------------------------------------------------------------------------------|
| 1 | {"name": "Alice", "age": 26, "city": "New York", "email": "alice@example.com"} |
| 2 | {"name": "Bob", "age": 30, "city": "Los Angeles"} |
| 3 | {"name": "Charlie", "age": 35, "city": "Chicago"} |
除了更新已有的键值对外,JSON_SET()
函数还可以用来添加新的键值对,比如给所有人的信息中都添加一个phone
字段:
UPDATE people
SET info = JSON_SET(info, '$.phone', '123-456-7890');
查询people
表可以查看更新后的结果:
SELECT * FROM people;
结果如下:
| id | info |
|----|--------------------------------------------------------------------------------|
| 1 | {"name": "Alice", "age": 26, "city": "New York", "email": "alice@example.com", "phone": "123-456-7890"} |
| 2 | {"name": "Bob", "age": 30, "city": "Los Angeles", "phone": "123-456-7890"} |
| 3 | {"name": "Charlie", "age": 35, "city": "Chicago", "phone": "123-456-7890"} |
此外,JSON_SET()
函数还可以用来更新嵌套的JSON对象,比如给Alice
的信息中的address
字段添加street
和zip
:
UPDATE people
SET info = JSON_SET(info, '$.address', JSON_OBJECT('street', '123 Main St', 'zip', '10001'))
WHERE id = 1;
查询people
表可以查看更新后的结果:
SELECT * FROM people;
结果如下:
| id | info |
|----|------------------------------------------------------------------------------------------------------------|
| 1 | {"name": "Alice", "age": 26, "city": "New York", "email": "alice@example.com", "phone": "123-456-7890", "address": {"street": "123 Main St", "zip": "10001"}} |
| 2 | {"name": "Bob", "age": 30, "city": "Los Angeles", "phone": "123-456-7890"} |
| 3 | {"name": "Charlie", "age": 35, "city": "Chicago", "phone": "123-456-7890"} |
通过本文的介绍,我们了解了如何使用MySQL的JSON_SET()
函数来操作JSON类型字段。这个函数非常方便,可以帮助我们更新、添加和删除JSON对象中的键值对,更好地管理JSON数据。
本文链接:http://so.lmcjl.com/news/21442/