目录
前言
- 环境:
- mysql Ver 8.0.29 for Win64 on x86_64
- 最近被mysql的json操作函数坑了一把,顺便记录下之前折腾的一些东西。
在MySql中使用
声明json类型的字段:
- sql示例:
create table test(
uids json not null default ('[]')
);
- 注意:
- 默认值需要使用小括号包裹的符合json格式的字符串,如果不使用小括号()则会得到如下错误:
- ERROR 1101 (42000): BLOB, TEXT, GEOMETRY or JSON column 'uids' can't have a default value
- 最外面使用引号使用 单引号' 或 双引号" 都是可以的,但最好是最外面使用一种,里面的json字符串使用一种,例如:
- 默认值需要使用小括号包裹的符合json格式的字符串,如果不使用小括号()则会得到如下错误:
default ('[{"name":"coolight"}, {"name","洛天依"}]')
或
default ("[{'name':'coolight'}, {'name','洛天依'}]")
- 如果json由程序合成而来,尤其需要注意防止sql注入
Mysql中常用的操作json函数
- 贴个外链:Mysql JSON 函数参考,里面有很多函数的信息,这里我们只拿一些后面会用到的出来说。
- JSON_length ( json )
- 返回 JSON 文档或者 JSON 文档中通过路径指定的节点的长度
- 我们这里只用它来获取JSON数组的元素个数
- JSON_search ( json, one_or_all, string )
- 搜索json中第一次one或全部all和给定字符串string匹配的路径
- 后面我们会使用很多函数参数 path,实际上,我们很多时候并不知道想修改的值在json中的路径,尤其是在json是一个数组的时候,因此我们可以使用这个函数,搜索想修改的元素的路径,然后传给其他函数去操作。
- JSON_unquote ( json )
- 把json字符串的引号去掉
- JSON_contains ( json1, json2, path )
- 检查 json1 中指定路径 path 位置是否包含了 json2
- 在比较两个数组元素相同,仅允许元素顺序不同时,可以使用:
JSON_LENGTH(json1)=JSON_LENGTH(json2) and JSON_CONTAINS(json1, json2)
// 例如:
update test set enable=true where JSON_LENGTH(json1)=JSON_LENGTH(json2) and JSON_CONTAINS(json1, json2);
- JSON_array_append ( json, path, value )
- 对json中指定路径path所在的数组添加元素value
- 路径中 $ 表示 根,然后访问数组内容用 [下标],访问对象内容用 .值名称
// 示例:在数组末尾追加元素
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4);
// 得到 [1,2,3,4]
// 示例:对数组添加一个元素,如果已经存在则不添加
// ["1000000", "1000001", "1000002"]
update test set uids=json_array_append(uids, '$','1000001') where id=777 and JSON_CONTAINS(uids,JSON_ARRAY('1000001'))=0;
// 没有添加,注意where ... and 后面 使用JSON_CONTAINS判断了是否包含准备添加的元素
- JSON_remove ( json, path0 [, path1, ... ] )
- 删除json中指定路径 path 的元素
- 请注意,传入多个path时,它将从左往右依次删除,
- 因此,执行:JSON_remove( "[0,1,2,3,4,5,6]", "$[0]", "$[2]" )
- 先删除元素0,得到 [1,2,3,4,5,6]
- 然后删除当前下标为2的元素,即3,得到 [1,2,4,5,6]
- 示例:
- 删除一个没有重复元素的字符串数组中的一个元素
- 注意这里uids是一个 id的字符串数组
- JSON_SEARCH的第三个参数需要是字符串类型
// ["1000000", "1000001", "1000002"]
update test set uids=json_remove(uids, JSON_UNQUOTE(JSON_SEARCH(uids, 'one','1000001'))) where id=777;
// ["1000000", "1000002"]
- 注意,数组中字符串类型和数值类型是不一样的,例如:
- ['1','2','3'] 和 [1,2,3] 是不同的。
- 这在使用上面的那些函数去判断/添加/删除时尤其需要注意,否则可能出现添加使用的是数值类型,而查找/删除时使用元素的数值类型去搞,结果一直行不通,而两者的差别仅仅是传入元素时是否加了引号。(我之前就是这样的......)
- 如果你是程序合成sql,可以自己添加或去除元素的引号来控制,而如果你使用了mysql的触发器,则可以使用 CAST 函数来转换,例如:
create TRIGGER auto_reset after insert on test for each row
BEGIN
update test set uids=json_array_append(uids, '$', CAST(NEW.uid as char)) where id=NEW.id;
END;
I urge you to avoid this site. My personal experience with it has been nothing but disappointment along with concerns regarding deceptive behavior. Exercise extreme caution, or better yet, look for a more reputable service to meet your needs.
Unmatched Sturdiness : STPE can endure Serious stretching for nearly aオナホ 高級 month without tpe doll having tearing, letting For additional adaptability and a wider array of movements.
buying prescription drugs in mexico: medication from mexico pharmacy – mexican border pharmacies shipping to usa
mexico drug stores pharmacies: buying prescription drugs in mexico – buying prescription drugs in mexico
mexican online pharmacies prescription drugs [url=https://mexicanpharmacy1st.com/#]mexican drugstore online[/url] reputable mexican pharmacies online
pharmacies in mexico that ship to usa: buying prescription drugs in mexico online – reputable mexican pharmacies online
https://mexicanpharmacy1st.com/# pharmacies in mexico that ship to usa
mexican online pharmacies prescription drugs: mexican rx online – mexican mail order pharmacies
http://mexicanpharmacy1st.com/# medication from mexico pharmacy
mexican pharmaceuticals online: mexico pharmacy – mexican rx online
mexican online pharmacies prescription drugs mexican border pharmacies shipping to usa buying prescription drugs in mexico online
http://mexicanpharmacy1st.com/# mexican pharmaceuticals online
mexican border pharmacies shipping to usa: mexican pharmaceuticals online – buying prescription drugs in mexico online
very good jon mate. it helped me a lot mersii
buying from online mexican pharmacy: mexican drugstore online – mexico drug stores pharmacies
Your writing always leaves me feeling inspired.급전
mexican rx online [url=https://mexicanpharmacy1st.shop/#]medicine in mexico pharmacies[/url] mexican mail order pharmacies
https://mexicanpharmacy1st.com/# mexican mail order pharmacies
https://mexicanpharmacy1st.online/# mexican mail order pharmacies
https://mexicanpharmacy1st.online/# mexican online pharmacies prescription drugs
mexican online pharmacies prescription drugs: mexico pharmacies prescription drugs – reputable mexican pharmacies online
neurontin for sale online: neurontin 100 mg – neurontin cream
prednisone pak prednisone 50 mg prices prednisone tablet 100 mg
http://amoxila.pro/# where to get amoxicillin over the counter
http://zithromaxa.store/# zithromax 250 mg australia
prednisone uk over the counter [url=https://prednisoned.online/#]buy prednisone online no prescription[/url] prednisone brand name
” —A man “LOVE when my partner moans! I love a guy that makes noise in bed.Silence is strange.人形 えろ
brand cialis steer – penisole death penisole smaller
how much is amoxicillin prescription: buy amoxicillin 500mg – can you purchase amoxicillin online
I highly advise stay away from this platform. The experience I had with it was nothing but disappointment as well as concerns regarding scamming practices. Be extremely cautious, or better yet, seek out a more reputable site to meet your needs.
I urge you to avoid this site. The experience I had with it was only disappointment and suspicion of fraudulent activities. Exercise extreme caution, or better yet, seek out an honest site for your needs.
I urge you stay away from this site. The experience I had with it has been only dismay as well as doubts about deceptive behavior. Be extremely cautious, or better yet, find a more reputable service to fulfill your requirements.
motivations,ラブドール 高級constraints,
neurontin 204: order neurontin over the counter – drug neurontin
purchase prednisone 10mg 20mg prednisone prednisone price south africa
Absolutely pent subject matter, appreciate it for selective information .대출
generic zithromax medicine: average cost of generic zithromax – zithromax drug
https://prednisoned.online/# online order prednisone
dyson hair curlers дорожный чехол для дайсон стайлер .
https://prednisoned.online/# prednisone 20mg capsule
buy zithromax 500mg online [url=https://zithromaxa.store/#]zithromax 250 mg tablet price[/url] can you buy zithromax over the counter in australia
doxycycline generic: buy generic doxycycline – where can i get doxycycline
amoxil pharmacy: amoxicillin 500 mg where to buy – amoxicillin 50 mg tablets
buy doxycycline without prescription: order doxycycline 100mg without prescription – buy doxycycline online
zithromax 600 mg tablets: zithromax buy online – can i buy zithromax over the counter
prednisone 10mg online prednisone 4 mg daily 20mg prednisone
drug neurontin: gabapentin 300 – neurontin 600mg
плойка dyson дайсон аирврап .
I urge you steer clear of this platform. The experience I had with it was purely disappointment along with doubts about deceptive behavior. Exercise extreme caution, or better yet, seek out a trustworthy site for your needs.
I urge you stay away from this site. The experience I had with it has been nothing but dismay along with doubts about scamming practices. Be extremely cautious, or even better, look for a trustworthy site to meet your needs.