需求描述:

  在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

mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?的更多相关文章

  1. sql判断以逗号分隔的字符串中是否包含某个字符串--------MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

    sql判断以逗号分隔的字符串中是否包含某个字符串---------------https://blog.csdn.net/wttykj/article/details/78520933 MYSQL中利 ...

  2. SQLserver将查询的字段中的数据 拼接成字符串用逗号隔开

    ,,'') 将查询的字段中的数据 拼接成字符串用逗号隔开

  3. MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

    首先我们建立一张带有逗号分隔的字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCH ...

  4. MYSQL查询某字段中以逗号分隔的字符串的方法

    首先我们建立一张带有逗号分隔的字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCH ...

  5. mysql判断是否包含某个字符的方法和修改表中指定字段

    用locate 是最快的,like 最慢.position一般实战例子:select * from historydatawhere locate('0',opennum) and locate('1 ...

  6. Sqlserver中查找包含某一列的所有的表

    select cols.name,cols.id,objs.name,objs.id from syscolumns cols INNER JOIN sysobjects objs on cols.i ...

  7. MySQL:判断逗号分隔的字符串中是否包含某个字符串 && 如何在一个以逗号分隔的列表中的一个字段中连接MySQL中的多对多关系中的数据

    需求:      sql语句中,判断以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素, 例如:判断 'a,b,c,d,e,f,g' 中是否包含 'a',sql语句如何 ...

  8. [办公自动化] 再读《让EXCEL飞》(从excel导入access数据时,union联合查询,数据源中没有包含可见的表格)

    一年多以前就买了@Mrexcel的<让excel飞>这本书.整体思路是利用access结合excel,大幅度提高数据分析效率. 最近又拿出来看了看.第十五章,比高级筛选更“高级”,P241 ...

  9. 往MySQL数据库datetime类型字段中插入数据库的当前时间

    代码: StringBuilder sb = new StringBuilder(); sb.append(" insert into uosdetailfile ("); sb. ...

随机推荐

  1. <Effective Django>读书笔记

    In Django parlance, a project is the final product, and it assembles one or more applications togeth ...

  2. [deb]制作deb包

    转自:http://www.cnblogs.com/Genesis-007/p/5219960.html 查看系统安装了哪些deb包: dpkg -l 打包: dpkg -b dir result.d ...

  3. [开发笔记]-ASP.NET项目在IIS上使用虚拟目录

    说一下我想要实现的效果: 假如我做一个图片展示类的网站,或者其他需要用户上传文件的网站,需要将用户上传的文件保存到一个Uploadfiles文件夹下,一般我们在做项目时用户上传的文件都是保存在网站项目 ...

  4. QButton

    Button.h #pragma once // QButton class QButton : public CButton { DECLARE_DYNAMIC(QButton) // Constr ...

  5. .net类中静态方法的继承

    父类中的静态方法,继承的子类能不能调用?一直在这里有疑惑,即使在下面的测试之后,也只是得到了结论,不明原理. class ClsParent { public static void ShowSth( ...

  6. hbase 学习(十二)非mapreduce生成Hfile,然后导入hbase当中

    最近一个群友的boss让研究hbase,让hbase的入库速度达到5w+/s,这可愁死了,4台个人电脑组成的集群,多线程入库调了好久,速度也才1w左右,都没有达到理想的那种速度,然后就想到了这种方式, ...

  7. Hive Tunning(三) 最佳实践

    在上一讲的基础上,我们来做来一个实际的例子来展示如何在实操中进行高效的hive查询作业. (1)首先我们建立一个表 CREATE EXTERNAL TABLE pos_staging( txnid S ...

  8. windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32

    到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe JavaWindowsCC++C#  当电脑里面有多个jdk或是jre时,在cmd里面到底是用的哪个 ...

  9. druid的配置

    //----------------------------pom.xml-------------------------------- <!-- druid --> <depen ...

  10. 【Html】网页获取屏幕宽高

    <html> <script> function size(){ document.write( "屏幕分辨率为:"+screen.width+" ...