mysql json型別操作
阿新 • • 發佈:2019-01-30
基於 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
- 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;
JSON_SEARCH 函式中3個引數的含義: 1 要查詢的文件 2 查詢的範圍,有兩個選項,’one’ 查詢第一個符合條件的,’all’查詢所有符合條件的 3 查詢的條件
帶條件更新資料
例如想給文章新增一個 “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;