本文共 1455 字,大约阅读时间需要 4 分钟。
CREATE TABLE emp_details( emp_no INT PRIMARY KEY, details JSON)INSERT INTO emp_details (emp_no, details) VALUES('1', '{"locations": "IN", "phone": "+11800000000", "email": "ab@example.com", "address": {"line1": "abc", "line2": "xyz street", "city": "Bangalore", "pin": "560103"}}')
使用 ->
检索
SELECT emp_no, details -> '$.address.pin' FROM emp_details;使用
->>
检索 SELECT emp_no, details ->> '$.address.pin' FROM emp_details;
->
和 ->>
的区别在于查询出来的结果携带双引号或者不携带双引号,其中->
携带双引号,->>
不携带双引号。 JSON_PRETTY
JSON格式显示SELECT emp_no, JSON_PRETTY(details) FROM emp_details;
SELECT emp_no FROM emp_details WHERE details -> '$.address.pin' = '560103';# 等同于SELECT JSON_CONTAINS(details ->> '$.address.pin', '560103') FROM emp_details;
查询json中是否包含key
SELECT JSON_CONTAINS_PATH(details, 'one', '$.address.line1') FROM emp_details;
JSON_CONTAINS_PATH
中的one
表示至少应该存在一个键。可选值:one
,all
。
JSON_SET()
:替换现有值并添加不存在的值。
UPDATE emp_details SET details = JSON_SET(details, '$.address.pin', '560100', '$.nickname', 'kai') WHERE emp_no = 1;
JSON_INSERT()
:插入值,但不替换现有值。
新增时不会覆盖老数据。
UPDATE emp_details SET details = JSON_INSERT(details, '$.address.pin', '560132', '$.address.line4', 'A Wing')WHERE emp_no = 1;
JSON_REPLACE
:仅替换现有值。
只更新,不新增。
UPDATE emp_details SET details = JSON_INSERT(details, '$.address.pin', '560132', '$.address.line5', 'landmark')WHERE emp_no = 1;
JSON_REMOVE
UPDATE emp_details SET details = JSON_REMOVE(details, '$.address.line5') WHERE emp_no = 1;
转载地址:http://mjxii.baihongyu.com/