mysql中,創建包含json數據類型的表?創建json表時候的注意事項?查詢json字段中某個key的值?


需求描述:

  在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


免責聲明!

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



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