MySQL 之 json 數據操作


背景:

開發一個自定義模板的需求,針對數據庫設計,我想到了json,慶幸使用的MySQL版本為5.7,因為MySQL正是從5.7版本開始引入的json數據結構。

 

數據庫操作:

新建數據庫表之json數據結構,和其它數據結構區別不大,就是把數據類型變成了json,如下示例:

CREATE TABLE `t_task_order_template` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `json_data` json DEFAULT NULL COMMENT 'json數據,模板字段詳情(組件類型type、字段名稱name、字段key、提示文字hint、是否必填mandatory、選項值option[組件類型是單選或者多選時存在]、日期格式format[組件類型為日期型時存在])',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='';

新建表后,需插入json數據格式的數據。數據示例:

[{"key": "key1", "hint": "", "name": "姓名", "type": "1", "format": "", "option": "", "mandatory": "1"}, {"key": "key2", "hint": "", "name": "年齡", "type": "2", "mandatory": ""}, {"key": "key3", "hint": "", "name": "性別", "type": "1", "mandatory": ""}]

上面的數據是個json數組,查詢json數組條件的方法如下,通過 JSON_CONTAINS 函數,獲取數組中name值為“姓名”的結果集

SELECT * FROM `t` where JSON_CONTAINS(json_data,JSON_OBJECT('name', "姓名"));

查完了json數組,再看json數據格式。數據示例:

{"key1": "小王", "key2": "22", "key3": "男"}

可通過如下兩種方法對數據查詢,查詢key1值為“小王”的數據

SELECT * FROM `t` where json_data -> '$.key1'= '小王';
SELECT * FROM `t` where json_extract(json_data,'$.key1') = '小王';

看完查詢,再看新增和更新,都是json_set函數,第一條語句將json結構中key1值更新為“小方”,第二條語句則增加key4值22

UPDATE t SET json_data = json_set(json_data,'$.key1','小方');
UPDATE t SET json_data = json_set(json_data,'$.key4','22');

看完新增和更新,再看刪除,刪除剛剛新增的key4

UPDATE t SET json_data = json_remove(json_data,'$.key4');

如果是對json數組進行修改操作,語法如下,增加對應[index]即可:

UPDATE t SET json_data = json_set(json_data,'$[0].hint','22')

 

最后看一下json相關操作的一些基本函數:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM