目录
前言
- 环境:
- 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;
pharmacie en ligne: pharmacie en ligne livraison europe – pharmacie en ligne sans ordonnance
Your passion for the subject matter is evident in every post you write. This was another outstanding article. Thank you for sharing!coinsslot
gГјnstige online apotheke: online apotheke preisvergleich – apotheke online
I highly advise steer clear of this platform. The experience I had with it was purely disappointment as well as suspicion of fraudulent activities. Exercise extreme caution, or even better, look for an honest site to meet your needs.
I urge you stay away from this site. My personal experience with it has been nothing but disappointment and suspicion of scamming practices. Exercise extreme caution, or alternatively, seek out a trustworthy site to fulfill your requirements.
Здравствуйте!
Получите документы об образовании всех Вузов России с гарантированной доставкой по РФ без предоплаты.
http://www.dlplomanrussia.com
farmacias online seguras en espaГ±a: farmacia online envГo gratis – farmacias online seguras
I strongly recommend stay away from this site. My personal experience with it was nothing but frustration along with concerns regarding scamming practices. Be extremely cautious, or better yet, look for a more reputable platform for your needs.
I highly advise to avoid this platform. My own encounter with it has been purely dismay along with suspicion of fraudulent activities. Exercise extreme caution, or alternatively, find an honest site to meet your needs.
I urge you stay away from this platform. My own encounter with it has been purely frustration along with suspicion of deceptive behavior. Proceed with extreme caution, or alternatively, look for an honest platform to meet your needs.
apotheke online: online apotheke – online apotheke preisvergleich
https://eumedicamentenligne.shop/# pharmacie en ligne sans ordonnance
Pharmacie en ligne livraison Europe pharmacie en ligne fiable pharmacie en ligne france fiable
internet apotheke [url=https://euapothekeohnerezept.shop/#]internet apotheke[/url] ohne rezept apotheke
farmacie online autorizzate elenco: acquisto farmaci con ricetta – farmacie online sicure
inhalers for asthma flat – asthma treatment fortune asthma medication basket
farmacia en casa online descuento: farmacia barata – farmacias direct
I strongly recommend steer clear of this site. The experience I had with it was only disappointment along with concerns regarding deceptive behavior. Exercise extreme caution, or better yet, find a more reputable service to meet your needs.
I highly advise steer clear of this site. My personal experience with it has been only frustration along with suspicion of fraudulent activities. Be extremely cautious, or even better, look for a trustworthy platform to meet your needs.
the close of May 2021 is ideal for self-pleasure tips.Early in the pandemic,エロ ラブドール
I urge you stay away from this site. The experience I had with it was only frustration along with doubts about deceptive behavior. Proceed with extreme caution, or alternatively, seek out a trustworthy service for your needs.
online apotheke deutschland: ohne rezept apotheke – online apotheke gГјnstig
Keto candies have emerged as a widely-liked snack alternative for individuals following a low-carb or reduced-carb diet. These gummy treats are designed to be low in net carbohydrates, rendering them a healthy indulgence for those trying to sustain a https://t.me/s/ketogummies condition of ketonemia.
By utilizing natural sugar substitutes like stevia or erythritol, ketogenic sweets provide a satisfying sugary palate without raising blood sugar readings, a frequent issue with regular candy.
farmacia online barata: farmacia barata – farmacia online madrid
http://euapothekeohnerezept.com/# online apotheke versandkostenfrei
журнал о красоте и моде https://zhurnal-o-krasote11.ru/ .
pharmacie en ligne pharmacie en ligne france pas cher Pharmacie en ligne livraison Europe
Моя стиральная машина сломалась, а деньги на ремонт нужны были срочно. На телеграм-канале новые и малоизвестные МФО 2024 нашел множество МФО, где предлагают займы на карту без отказа и круглосуточно. Понравилось, что займ могут получить все от 18 лет. Оформил заявку и уже через несколько минут деньги были на карте. Это помогло мне быстро починить технику. Очень удобный канал, рекомендую всем, кому нужны срочные деньги!
farmacia online barcelona [url=https://eufarmaciaonline.shop/#]farmacia barata[/url] farmacia online barcelona
дешевое такси дешевое такси .
trouver un médicament en pharmacie: Pharmacie Internationale en ligne – pharmacies en ligne certifiées
eu apotheke ohne rezept: online apotheke deutschland – online apotheke deutschland
pharmacies en ligne certifiГ©es: pharmacie en ligne france livraison internationale – pharmacie en ligne pas cher
Здравствуйте!
Получите документ об образовании по выгодной цене с доставкой по РФ и оплатой после получения.
http://www.dlplomanrussia.com
farmacia online madrid: farmacia online barata – farmacia online barcelona
This post was incredibly informative and well-organized. I learned so much from reading it. Thank you for your hard work and dedication!rendingnicheblog
eu apotheke ohne rezept: online apotheke rezept – medikament ohne rezept notfall
farmacia online barcelona: farmacia online 24 horas – farmacia en casa online descuento
acheter médicament en ligne sans ordonnance: trouver un médicament en pharmacie – Pharmacie sans ordonnance
заказ такси по телефону заказ такси по телефону .
бьюти журналы https://zhurnal-o-krasote11.ru/ .
medikament ohne rezept notfall: online apotheke versandkostenfrei – eu apotheke ohne rezept
dark web market https://mydarknetmarketlinks.com/ – darknet marketplace darknet market list
farmacia online barata farmacias online seguras п»їfarmacia online espaГ±a
You should see the new variations to our refund coverage which states that canceling any in-stock doll buy will lead to a ten cancellation/restocking pricEmail us at mailto:[e mail guarded] for inquiries if you are unsure of anything in advance of acquiring.ラブドール えろAfter getting been whitelisted in our technique,
online apotheke versandkostenfrei [url=http://euapothekeohnerezept.com/#]eu apotheke ohne rezept[/url] online apotheke rezept
Farmacia online migliore: acquisto farmaci con ricetta – farmacie online autorizzate elenco
такси https://taksi-vyzvat.ru/ .
такси для инвалидов http://www.taksi-vyzvat.ru .
https://eumedicamentenligne.com/# pharmacie en ligne france livraison belgique