Операция SQL-mysql json

задняя часть
Операция SQL-mysql json

Введение

После MySQL 5.7.8 он поддерживает тип данных JSON (указанный rfc7159), который может использовать тип json в поле для автоматической проверки, являются ли это данными типа json, иначе вставленные данные сообщат об исключении; во-вторых, внутренний хранение данных json выполнено.Оптимизированное хранилище, можно быстро читать данные типа json, например, нет необходимости преобразовывать двоичный json в текстовую форму для чтения;

Этот набор руководств

Нет публики:искатель знаний

Искатель знаний (Наследуя дух открытого исходного кода, Распространение знаний о технологиях;)

Две операции JOSN

Оператор создания таблицы выглядит следующим образом: объявите поле области как тип JSON;

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单编号',
  `order_name` varchar(255) DEFAULT NULL COMMENT '订单名称',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `year` year(4) DEFAULT NULL COMMENT '年份',
  `area` json DEFAULT NULL COMMENT '地区',
  PRIMARY KEY (`id`),
  UNIQUE KEY `order_name` (`order_name`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

MySQL поддерживает объекты json и массивы json, и их можно вкладывать друг в друга; json похож на карту, в java json — это класс реализации карты, если новички не знают, что такое json, их можно использовать как карту , то есть хранить ключи — структуру данных в виде значения;Обратите внимание, что ключ данных json должен быть строкой, может быть ключ, но не значение.;

2.1 Вставка данных о Джосне

Вставьте объект json, восточное значение равно 50, а южное значение равно 65, чтобы получить объект json;

INSERT INTO `order`(`order_name`, `year`, `area`) 
VALUES ('荷小花的订单', 2020, '{"east": "50", "south": "65"}');

эквивалентно использованиюJSON_OBJECTфункция, пример выглядит следующим образом

INSERT INTO `order`(`order_name`, `year`, `area`) 
VALUES ('荷小花的订单', 2020, JSON_OBJECT("east", "50", "south", "65"));

вставить json-массив

INSERT INTO `order`(`order_name`, `year`, `area`) 
VALUES ('荷小花的订单', 2020, '[{"east": "50", "south": "65"}]');

эквивалентно использованиюJSON_ARRAYфункция, пример выглядит следующим образом

INSERT INTO `order`(`order_name`, `year`, `area`) 
VALUES ('荷小花的订单', 2020, JSON_ARRAY("east", "50", "south", "65"));

2.2 Запрос данных json

Использовать столбец - символ пути пути->Запросите значение указанного ключа,

select order_name, area -> '$.east' from `order`

Обратите внимание, что если ключ east не существует в данных json, он будет указан как нулевое значение.

Вывод выглядит следующим образом

---------   ------
荷小花的订单	"50"
荷小花的订单	

Вы также можете использовать символ ->>, разница заключается в использовании->>Более интуитивно понятный, самый внешний слой выходных данных json не будет содержать двойных кавычек, а если во внутренних данных есть двойные кавычки, не будет экранирования обратной косой черты;

select order_name, area ->> '$.east' from `order`

Используйте одинарные кавычки вместо двойных кавычек

select order_name, area ->> "$.east" from `order`

мы также можем использоватьJSON_EXTRACTфункция для достижения того же эффекта;

SELECT order_name,JSON_EXTRACT(area, '$.east') from `order`;

2.3 Изменить данные json

использоватьJSON_SETУстановите значение ключа json

id = 1, чтобы получить данные о площади следующим образом

{"north": "55", "south": "66"}

Теперь пример оператора для изменения южного значения на 60 выглядит следующим образом.

update `order` set area = json_set(area, '$[0].south', '60') where id = '1'

в[0]представлятьjsonпервый объект в,и так далее[0] представляет первый объект в json и т. д.[1] — второй объект в josn;

Пример

["6","2",{"east": "50", "south": "65"}]

[0]за"6",[0] равно "6",[1] равно "2" ,[2]за"east":"50","south":"65";[2] {"восток": "50", "юг": "65"};[2].east равно "50" или$[2][1];

Если приведенное выше выражение $[*] трудно понять, вы также можете использовать следующие методы.

update `order` set area = json_set(area, '$.south', '60') where id = '1'

подсказка: если вы измените значение json целиком, это согласуется с обычным способом обновления данных

2.4 Удалить данные в json

Используйте json_remove для достижения эффекта;

Пример: удалить южный ключ в json

update `order` set area =json_remove(area, '$.south') where id = '1'

Три функции jsom

3.1 cast

Функция приведения — это специальная функция, которую можно использовать сCAST(expr AS type)Функция преобразует тип данных, эта функция аналогична использованию convert, то есть ожидаемое выражение преобразуется в ожидаемый тип;

например строка知识追寻者Преобразование из типа по умолчанию в тип utf8

SELECT CONVERT('知识追寻者' USING utf8);

В следующих случаях запрос представляет собой строку, а не данные json.

select '{"east": "50", "south": "65"}' as str

Давайте посмотрим на использование функции приведения для преобразования строки в тип json.

select cast( '{"east": "50", "south": "65"}' as json )

3.2 JSON_TYPE

Функция JSON_TYPE попытается проанализировать параметр как значение json,

Пример

select JSON_TYPE('{"east": "50", "south": "65"}')

Получить результат как объект json

OBJECT

Пример

select JSON_TYPE('[{"east": "50", "south": "65"}]')

получить результат в виде массива json

ARRAY

Пример

select JSON_TYPE('hello')

Вывод ненормальный, неверный json

Invalid JSON text in argument 1 to function json_type: "Invalid value." at position 0.

3.3 JSON_MERGE

Функция JSON_MERGE объединит несколько документов json; правила объединения следующие:

  • Если оба являются массивом json, объединиться в массив json;
  • Если оба являются объектами json, объединяются в объекты json;
  • Если есть несколько типов данных, инкапсулируйте элементы массива, отличные от json, в массив json и объедините их в соответствии с приведенными выше правилами;

Пример

select json_merge('["west","20"]', '{"east": "50", "south": "65"}')

выход

["west", "20", {"east": "50", "south": "65"}]

3.4 JSON_VALID

Функция JSON_VALID предназначена для проверки того, является ли это функцией json, она возвращает 1, иначе возвращает 0;

Пример выглядит следующим образом: верните 1;

SELECT JSON_VALID('{"east": "50", "south": "65"}')

Пример выглядит следующим образом, возвращает 0;

SELECT JSON_VALID('hello')

3.5 JSON_INSERT

Функция JSON_INSERT добавляет новое значение в json, не изменяя существующее значение;

Данные с id = 1 выглядят следующим образом

{"north": "55"}

Заявление об обновлении выглядит следующим образом

update `order` set area =JSON_INSERT(area, '$.north', 55 ,'$.south', "60") where id = '1'

Результат замены следующий

{"north": "55", "south": "60"}

3.6 JSON_REPLACE

JSON_REPLACE заменяет существующее значение, если есть новое значение, оно не будет добавлено;

Данные с id = 1 выглядят следующим образом

{"north": "55", "south": "60"}

Заявление об обновлении выглядит следующим образом

update `order` set area =JSON_REPLACE (area, '$.north', "50" ,'$.east', "60")
where id = '1'

Результат замены следующий

{"north": "50", "south": "60"}

3.7 JSON_SEARCH

JSON_SEARCH, возвращает путь, поддерживает возврат одиночного и многократного;

Данные с id = 1 выглядят следующим образом

[{"north": "50", "south": "60"}, {"north": "50", "south": "70"}]

Запрос ключевого пути со значением 50

select JSON_SEARCH(area, 'one', '50')  from `order`  where id = '1'

выход

"$[0].north"

Запросить все ключевые пути со значением 50

select JSON_SEARCH(area, 'all', '50')  from `order`  where id = '1'

выход

["$[0].north", "$[1].north"]

3.8 JSON_KEYS

Возвращает все ключи под значением json верхнего уровня.

Данные с id = 1 выглядят следующим образом

[{"north": "50", "south": "60"}, {"north": "50", "south": "70"}]

Запросить все ключи первого объекта json в данных json

select JSON_KEYS(area, '$[0]')  from `order`  where id = '1'

выход

["north", "south"]