需求描述:
在mysql數據庫中,創建包含json數據類型的表.記錄下,在創建的過程中,需要注意的問題.
操作過程:
1.通過以下的語句,創建包含json數據類型的表
mysql> create table tab_json(id bigint not null auto_increment,data json,primary key(id)); Query OK, 0 rows affected (0.09 sec) mysql> desc tab_json -> ; +-------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | data | json | YES | | NULL | | +-------+------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
創建json數據類型的表,json字段不能包含默認值:
mysql> create table tab_json_01(id bigint not null auto_increment,data json default '{"name":"Dear"}',primary key(id));
ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'data' can't have a default value
備注:json數據類型的列不能有默認值.
2.向json數據類型中插入數據
mysql> insert into tab_json values (null,'{"name":"david","address":"Beijing","Tel":"132223232444"}'); Query OK, 1 row affected (0.08 sec) mysql> insert into tab_json values (null,'{"name":"Mike","address":"Guangzhou","Tel":"13390989765"}'); Query OK, 1 row affected (0.01 sec)
mysql> insert into tab_json values (null,'Jack');
ERROR 3140 (22032): Invalid JSON text: "Invalid value." at position 0 in value for column 'tab_json.data'
mysql> insert into tab_json values (null,'{"names":"Smith","names":"Nancy"}'); #插入的時候有多個names這個key
Query OK, 1 row affected (0.00 sec)
備注:auto_increment字段通過插入null值,就能實現值的自動增長.json數據類型的類有自動檢查插入的值是否是json類型的,如果插入的是json類型以外的,就會報錯,也就是說,必須要插入json類型的值.
3.查詢json表中的內容
mysql> select * from tab_json;
+----+----------------------------------------------------------------+
| id | data |
+----+----------------------------------------------------------------+
| 1 | {"Tel": "132223232444", "name": "david", "address": "Beijing"} |
| 2 | {"Tel": "13390989765", "name": "Mike", "address": "Guangzhou"} |
| 3 | {"names": "Smith"} | #在向json列插入值的時候同樣執行標准化,即會將重復的key只保留第一個,即多個names的時候,也只是第一個被保留
+----+----------------------------------------------------------------+
3 rows in set (0.00 sec)
備注:查詢到data字段的值是json對象的值.
4.獲取json數據類型中某個字段的值
mysql> select json_extract(data,'$.name'),json_extract(data,'$.address') from tab_json;
+-----------------------------+--------------------------------+
| json_extract(data,'$.name') | json_extract(data,'$.address') |
+-----------------------------+--------------------------------+
| "david" | "Beijing" |
| "Mike" | "Guangzhou" |
| NULL | NULL |
+-----------------------------+--------------------------------+
3 rows in set (0.00 sec)
備注:查詢出來的就是key,name和address的對應的value.
文檔創建:2018年6月5日14:07:57
文檔更新-1:增加插入數據標准化的內容,標准化指的是,插入的時候,多個重復的key只保留第一個 -- 2018年6月6日16:57:54