1. 程式人生 > 實用技巧 >MySQL 之 json 資料操作

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相關操作的一些基本函式: