MYSQL Json

一、查询

-- 查询字段类型为JSON的字段user
SELECT user FROM person;	-- {"name": "john", "age": 21}

-- 查询字段user的name属性
SELECT user->'$.name' FROM person;	-- "john"

-- 查询字段user的name属性
SELECT user->>'$.name' FROM person;	-- john

-- 查询字段user的age属性
SELECT JSON_EXTRACT(user, '$.age') FROM person;	-- 21

二、修改

-- 修改user的name为"tina"
UPDATE person SET user = JSON_SET(user, '$.name', 'tina');

-- 查询字段user的name属性
SELECT user->'$.name' FROM person;	-- "tina"

三、索引

可通过在虚拟列上建索引来实现

-- 新建虚拟列name_virtual
ALTER TABLE person ADD COLUMN name_virtual VARCHAR(10) AS (user->>'$.name');

-- 给虚拟列建索引
ALTER TABLE person ADD INDEX idx_name_virtual (name_virtual);

四、附

Tips

  • 自MySQL 5.7.8之后开始支持JSON处理
  • JSON类型字段存储空间大小约等于LONGTEXT

JSON语法

https://dev.mysql.com/doc/refman/5.7/en/json-functions.html

猜你喜欢

转载自my.oschina.net/u/812874/blog/1812999