1. 程式人生 > >mysql json型別操作

mysql json型別操作

基於 mysql  5.7

插入 JSON

 INSERT INTO `lnmp` (category, tags) VALUES ('{"id": 1, "name": "lnmp.cn"}', '[1, 2, 3]');

更新 JSON

JSON_INSERT() 插入新值,但不會覆蓋已經存在的值

JSON_SET() 插入新值,並覆蓋已經存在的值

JSON_REPLACE() 只替換存在的值,不存在被忽略。

JSON_REMOVE  移除節點

eg:

UPDATE lnmp SET category = JSON_REMOVE(category, '$.url', '$.host') WHERE id = 1;


UPDATE lnmp SET category = JSON_SET(category, '$.host', 'www.lnmp.cn', '$.url', 'http://www.lnmp.cn') WHERE id = 1;

UPDATE lnmp SET category = JSON_INSERT(category, '$.name', 'lnmp', '$.url', 'www.lnmp.cn') WHERE id = 1;

查詢JSON

 SELECT * FROM lnmp WHERE JSON_CONTAINS(category, '1', '$.id');

JSON_EXTRACT(json列 , '$.鍵')


1. 查詢帶有標籤”Mysql”的所有文章

SELECT * FROM `article`

WHERE JSON_CONTAINS(tags, '["Mysql"]');

2. 查詢標籤中以”Data”開頭的文章

SELECT * FROM `article`

WHERE JSON_SEARCH(tags, 'one', 'Data%') IS NOT NULL;

3.json_serch

  1. UPDATE `article`
  2. SET tags = JSON_MERGE(tags,'["dev"]')
  3. WHERE
  4. JSON_SEARCH(tags,'one','dev') IS NULL
  5. AND
  6. JSON_SEARCH(tags,'one','Mysql') IS NOT NULL;
JSON_SEARCH 函式中3個引數的含義:
要查詢的文件
查詢的範圍,有兩個選項,’one’ 查詢第一個符合條件的,’all’查詢所有符合條件的
查詢的條件

帶條件更新資料

例如想給文章新增一個 “dev” tag,更新的條件是已經包含 “Mysql” 標籤,並且還沒有 “dev” 標籤的資料

更新語句如下

UPDATE `article`

SET tags = JSON_MERGE(tags, '["dev"]')

WHERE

JSON_SEARCH(tags, 'one', 'dev') IS NULL

AND

JSON_SEARCH(tags, 'one', 'Mysql') IS NOT NULL;