需求描述:

  在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. MT29F8G08ABACA nandflash 参数记录

    跟踪 MT29F8G08ABACA datasheet ,记录里面有关软件的参数 首先,硬件上的特征,page size , oob , block size [](http://images2017 ...

  2. 基于Cookie的购物车

    var Cookies = {}; Cookies.set = function (name, value) { var argv = arguments; var argc = arguments. ...

  3. docker安装及加速配置

    需要centos7版本,内核版本不低于3.10 [root@localhost ~]# uname -r3.10.0-514.el7.x86_64 第一步:更新当前软件:[root@localhost ...

  4. 【javascript】js 检验密码强度

    最近一直在做通行证项目,里面的注册模块中输入密码需要显示密码强度(低中高).今天就把做的效果给大家分享下,代码没有网上搜索的那么复杂,能够满足一般的需求. html 代码如下: <!DOCTYP ...

  5. .gitignore不生效解决办法

    .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的.那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提 ...

  6. sublime 之 vitage/emmet

    ctrl+shift+p 打开Package Controlctrl+shift+t 恢复已关闭标签ctrl+/ 代码注释/取消注释 --------------------------------- ...

  7. javascript显示年月日时间代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. ggplot ggplot2 画图

    折线图-ggplot2  http://blog.163.com/yugao1986@126/blog/static/6922850820131161531421/http://blog.sina.c ...

  9. this小案例

    public class Son extends Parent { public String name="jack"; public void init(){ super.ini ...

  10. window.showModalDialog乱码(完美)解决方案

    关于jsp弹出jsp页面传参数中文乱码的问题解决: 弹出方式--window.showModalDialog(requestURL,null,strFeatureInfo); 乱码原因:url传递方式 ...