目录
前言
- 环境:
- 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;
online canadian pharmacy review [url=http://cheapestcanada.com/#]cheapest canada[/url] canada drugstore pharmacy rx
https://36and6health.shop/# online pharmacy discount code
https://cheapestmexico.shop/# purple pharmacy mexico price list
canada pharmacy reviews cheapest canada my canadian pharmacy reviews
служба открытия замков дверей https://vskrytie-zamkov-moskva111.ru .
В нашем обществе, где аттестат – это начало отличной карьеры в любом направлении, многие ищут максимально быстрый и простой путь получения качественного образования. Наличие документа об образовании трудно переоценить. Ведь именно диплом открывает двери перед всеми, кто собирается вступить в сообщество профессионалов или продолжить обучение в университете.
В данном контексте наша компания предлагает максимально быстро получить любой необходимый документ. Вы можете заказать аттестат, и это является удачным решением для всех, кто не смог закончить обучение или утратил документ. Аттестат изготавливается с особой аккуратностью, вниманием ко всем деталям. В результате вы сможете получить 100% оригинальный документ.
Плюсы данного подхода заключаются не только в том, что можно максимально быстро получить аттестат. Весь процесс организован комфортно, с профессиональной поддержкой. Начиная от выбора нужного образца документа до консультации по заполнению персональной информации и доставки в любой регион страны — все под абсолютным контролем квалифицированных мастеров.
В итоге, для тех, кто ищет максимально быстрый способ получить необходимый документ, наша компания предлагает отличное решение. Приобрести аттестат – значит избежать продолжительного процесса обучения и сразу переходить к личным целям, будь то поступление в ВУЗ или начало удачной карьеры.
https://vsediplomu.ru/
generic clomid without dr prescription where to get generic clomid pills can i order clomid without prescription
darknet markets https://mydarkmarket.com/ – best darknet markets free dark web
buy cytotec in usa: buy cytotec – п»їcytotec pills online
Have your wits about you.This means not being too drunk,オナドール
lisinopril 5 mg tablet price [url=https://lisinopril.club/#]buy 20mg lisinopril[/url] lisinopril prescription
Cytotec 200mcg price: cytotec online – buy cytotec pills
I highly advise stay away from this site. My own encounter with it has been only disappointment along with concerns regarding fraudulent activities. Be extremely cautious, or even better, look for an honest site to fulfill your requirements.
I urge you stay away from this platform. The experience I had with it has been nothing but frustration along with concerns regarding scamming practices. Exercise extreme caution, or better yet, seek out a trustworthy service to meet your needs.
I highly advise stay away from this site. My personal experience with it was purely dismay along with doubts about fraudulent activities. Proceed with extreme caution, or even better, find a trustworthy platform to meet your needs.
cytotec online: cytotec pills buy online – п»їcytotec pills online
I highly advise stay away from this site. My own encounter with it was purely dismay and suspicion of deceptive behavior. Exercise extreme caution, or better yet, find a more reputable platform to meet your needs.
neurontin 100 mg: neurontin 300mg tablet cost – order neurontin online
Эй, у тебя проблемы с холодильником Gaggenau? Наш Gaggenau холодильник сервис готов помочь. Бесплатный выезд мастера и качественный ремонт гарантированы!
служба по открытию замков http://www.vskrytie-zamkov-moskva111.ru .
order cheap propecia without a prescription cost of propecia without dr prescription generic propecia without rx
I urge you steer clear of this site. The experience I had with it was only frustration as well as doubts about deceptive behavior. Proceed with extreme caution, or alternatively, look for an honest service for your needs.
I urge you stay away from this site. My own encounter with it has been nothing but disappointment along with concerns regarding deceptive behavior. Be extremely cautious, or even better, seek out a trustworthy service to fulfill your requirements.
механизированная декоративная штукатурка mekhanizirovannaya-shtukaturka13.ru .
http://gabapentin.club/# neurontin 400 mg
get generic propecia prices [url=http://propeciaf.online/#]order propecia without dr prescription[/url] propecia without a prescription
order cheap propecia without insurance: get cheap propecia pill – get propecia without insurance
I urge you stay away from this platform. The experience I had with it was only disappointment along with suspicion of deceptive behavior. Exercise extreme caution, or better yet, look for a trustworthy service to meet your needs.
rx lisinopril 10mg: lisinopril 20mg buy – generic for prinivil
I strongly recommend stay away from this platform. The experience I had with it was nothing but frustration as well as doubts about fraudulent activities. Proceed with extreme caution, or even better, seek out a trustworthy platform to fulfill your requirements.
I highly advise steer clear of this site. The experience I had with it has been nothing but dismay along with doubts about fraudulent activities. Exercise extreme caution, or even better, look for an honest platform to meet your needs.
https://lisinopril.club/# lisinopril 5
В нашем обществе, где аттестат – это начало отличной карьеры в любом направлении, многие стараются найти максимально быстрый и простой путь получения качественного образования. Необходимость наличия официального документа об образовании переоценить невозможно. Ведь именно диплом открывает двери перед людьми, желающими начать трудовую деятельность или продолжить обучение в любом институте.
Наша компания предлагает максимально быстро получить любой необходимый документ. Вы можете заказать аттестат, и это становится отличным решением для человека, который не смог завершить образование, потерял документ или желает исправить плохие оценки. Аттестат изготавливается аккуратно, с особым вниманием ко всем нюансам. На выходе вы сможете получить полностью оригинальный документ.
Преимущества такого решения состоят не только в том, что можно оперативно получить свой аттестат. Процесс организовывается удобно, с нашей поддержкой. От выбора требуемого образца до консультации по заполнению личных данных и доставки по России — все будет находиться под полным контролем наших специалистов.
Всем, кто хочет найти быстрый способ получения требуемого документа, наша компания предлагает отличное решение. Приобрести аттестат – это значит избежать продолжительного процесса обучения и сразу перейти к личным целям: к поступлению в ВУЗ или к началу успешной карьеры.
http://www.vsediplomu.ru/
Divorce is legal in but because of Church disapproval,ラブドール オナニーPoland’s divorce rate is one of Europe’s lowest.
I found your perspective on this topic very interesting. Well done!blogpulse
механизированная штукатурка стен цена за м2 в московской области http://www.mekhanizirovannaya-shtukaturka13.ru .
cost cheap clomid price: order clomid tablets – where buy clomid without dr prescription
buy cytotec online fast delivery: order cytotec online – Abortion pills online
http://gabapentin.club/# neurontin
I’d like to repeat the act but only if it’s a CNC [consensual non-consent] type scenario. オナドールThen I can pretend I don’t like it even though I obviously am turned on by how turned on he gets.
neurontin 300 mg cap neurontin for sale neurontin 3
http://propeciaf.online/# cheap propecia without dr prescription
buying lisinopril in mexico [url=https://lisinopril.club/#]lisinopril tabs 20mg[/url] order lisinopril online
And Even with getting exactly the same doll through the exact company,ドール エロ Each and every distributor offers a little distinct customizations and costs, as it is possible to see below.
I highly advise steer clear of this platform. My own encounter with it has been nothing but disappointment along with concerns regarding fraudulent activities. Be extremely cautious, or even better, seek out an honest platform to meet your needs.
cost of generic clomid: cost clomid no prescription – get generic clomid price
ラブドール オナホbut we’re still together seven years later.” “In two weeks,
neurontin 400 mg price: neurontin 600mg – neurontin online
https://lisinopril.club/# lisinopril 2.5 mg tablet
ラブドール おすすめwith some inscriptions dating from the early Harappan phase,before 2700 BCE.