Skip to content

MySQL使用json

约 322 字大约 1 分钟

mysql

2023-11-22

mysql 5.7 及以上 支持 json 类型

mysql json 内置函数

JSON_OBJECT("key","value","key1","value1"):构建json对象 JSON_ARRAY("value","value1","value2"):构建数组

JSON_EXTRACT(列名,$.key):从json对象中拿到指定key的值 JSON_CONTAINS(列名,'{"k":"v"}'):查询json对象中是否存在指定kv

JSON_INSERT():在json对象中插入新的值,如果已存在,不会覆盖 JSON_SET():设置json对象中指定对象的值,如果已存在,覆盖 JSON_REPLACE():替换指定对象的值

JSON_REMOVE(列名,$.key):移除对象

实例

  • 1.创建表

    CREATE TABLE tablejson(
     id int NOTE NULL AUTO_INCREMENT PRIMARY key ,
     jjson json
    )
  • 2.新增数据(JSON_OBJECT()、JSON_ARRAY())

     INSERT INTO tablejson(`jjson`) VALUES(JSON_OBJECT("A", 1, "B", 2, "CCC", JSON_ARRAY(1,2,3)));
     INSERT INTO tablejson(`jjson`) VALUES('{"A": "aa", "B": "bb", "CCC": ["a", "b", "c"]}');

    img1

  • 3.更新数据(JSON_INSERT()、JSON_SET())

    `UPDATE tablejson set jjson = JSON_INSERT(jjson, '.A,11111,.A', 11111,'.D',33333) where id =1; -- 未替换已存在的 img2

    UPDATE tablejson set jjson = JSON_SET(jjson, '$.A', 11111,'$.E',233333) where id =1; -- 替换存在的,可多个参数 ![[Pasted image 20231122110112.png]] img4

    UPDATE tablejson set jjson = JSON_REMOVE(jjson, '$.E','$.CCC') where id =1; -- JSON_REMOVE() -- 移除指定的key,可多个

img3

  • 4 查询、删除数据

      select JSON_EXTRACT(jjson,'$.A') as A from `tablejson`
      select jjson->>'$.A' as A from `tablejson` -- 结果一样 JSON_EXTRACT()

img5

`select jjson->>'$.A' from `tablejson` where JSON_CONTAINS(jjson,'{"E": 233333}') -- JSON_CONTAINS()`

img6