背景:
開發一個自定義模板的需求,針對數據庫設計,我想到了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相關操作的一些基本函數: