mysql5.7新增加的JSON数据类型特征介绍


下面一起来了解下mysql5.7新增加的JSON数据类型特征,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql5.7新增加的JSON数据类型特征这篇短内容是你想要的。一、json结构创建测试
分析:article表中的字段category与tags均为json类型填写测试数据总体预览二、json查询select id,json_extract(category,’$.name’) as name from test.article;#提取json字段里面的信息

# column->path形式 访问json中的元素 category->’$.name’
select id,category->’$.name’ as name from test.article;#提取json字段里面的信息(访问json中的元素 category->’$.name’)
select id,json_unquote(json_extract(category,’$.name’)) as name from test.article;#提取json字段里面的信息,json_unqoute去双引号
select id,json_unquote(category->’$.name’) as name from test.article;#提取json字段里面的信息,json_unqoute去双引号
select id,category->>’$.name’ as name from test.article;

select * from test.article where category='{“id”: 1, “name”: “php”}’; #json不同于字符串,不能当作字符串做比较

select * from test.article where category=cast(‘{“id”: 1, “name”: “php”}’ as JSON); #通过CAST将字符串转换成JSON形式

select * from test.article where category->’$.name’=’java’;

select * from test.article where category->>’$.name’=’java’;

#JSON 中的元素搜索是严格区分变量类型的,比如说整型和字符串是严格区分的

select * from test.article where category->’$.id’=’2′;#字符号串

select * from test.article where category->’$.id’=2;#

select * from test.article where category->’$.id’=’3′;#字符号串

select * from test.article where json_extract(category,’$.id’)=’3′;#字符号串

select * from test.article where json_contains(category,’2′,’$.id’);#整数

select * from test.article where json_contains(category,'”3″‘,’$.id’);#字符号串

select * from test.article where json_contains(tags,'”linux”‘);#字符号串
2、查询json格式的字段
mysql>selectjsn_extract(data,’.name′),jsnextract(data,′.address’)fromuser;
+—————————–+——————————-+
|jsn_extract(data,’.name′)|jsnextract(data,′.address’)|
+—————————–+——————————-+
|”David”|”Shangahai”|
|”Amy”|NULL|
+—————————–+——————————-+
2rowsinset(0.00sec)
3、给json格式的某个键字段创建索引。首先创建虚拟列,之后在改虚拟列上创建索引。
mysql>ALTERTABLEuserADDuser_namevarchar(128)
->GENERATEDALWAYSAS(jsn_extract(data,’$.name’))VIRTUAL;
QueryOK,0rowsaffected(0.01sec)
Records:0Duplicates:0Warnings:0

mysql>selectuser_namefromuser;
+———–+
|user_name|
+———–+
|”Amy”|
|”David”|
+———–+
2rowsinset(0.00sec)

mysql>altertableuseraddindexidx_username(user_name);
QueryOK,2rowsaffected(0.01sec)
Records:2Duplicates:0Warnings:0
4、之后通过虚拟列名对json特定列进行索引查询:
mysql>explainselect*fromuserwhereuser_name='”Amy”‘G
***************************1.row********开发云主机域名*******************
id:1
select_type:SIMPLE
table:user
partitions:NULL
type:ref
possible_keys:idx_username
key:idx_username
key_len:131
ref:const
rows:1
filtered:100.00
Extra:NULL
1rowinset,1warning(0.00sec)三、json更新如果是整个 json 更新的话,和插入时类似的。mysql> UPDATE lnmp SET tags = ‘[1, 3, 4]’ WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0但如果要更新 JSON 下的元素,MySQL 并不支持 column->path 的形式mysql> UPDATE lnmp SET category->’$.name’ = ‘lnmp’, tags->’$[0]’ = 2 WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near ‘->’$.name’ = ‘lnmp’, tags->’$[0]’ = 2 WHERE id
= 1′ at line 1则可能要用到以下几个函数JSON_INSERT() 插入新值,但不会覆盖已经存在的值mysql> UPDATE lnmp SET category = JSON_INSERT(category, ‘$.name’, ‘lnmp’, ‘$.url’, ‘www.lnmp.cn’) WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0可以看到 name 没有被修改,但新元素 url 已经添加进去JSON_SET() 插入新值,并覆盖已经存在的值mysql> UPDATE lnmp SET category = JSON_SET(category, ‘$.host’, ‘www.lnmp.cn’, ‘$.url’, ‘http://www.lnmp.cn’) WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0可以看到 host 已经插入,url 已经被修改JSON_REPLACE() 只替换存在的值mysql> UPDATE lnmp SET category = JSON_REPLACE(category, ‘$.name’, ‘php’, ‘$.url’, ‘http://www.php.net’) WHERE id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0可以看到 name 已经被替换,url 不存在被忽略。JSON_REMOVE() 删除 JSON 元素mysql> UPDATE lnmp SET category = JSON_REMOVE(category, ‘$.url’, ‘$.host’) WHERE id = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0更多函数请参考:http://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html虽然在 MySQL 是个JSON 类型,但实际在 PHP 应用中返回的是 JSON 格式的字符串看完mysql5.7新增加的JSON数据类型特征这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的行业资讯栏目。

相关推荐: VSCode中如何添加并使用多光标

这篇文章主要介绍“VSCode中如何添加并使用多光标”,在日常操作中,相信很多人在VSCode中如何添加并使用多光标问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VSCode中如何添加并使用多光标”的疑惑有所帮助!接下来,请跟着…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/04 21:34
下一篇 05/04 21:34