Введение
После MySQL 5.7.8 он поддерживает тип данных JSON (указанный rfc7159), который может использовать тип json в поле для автоматической проверки, являются ли это данными типа json, иначе вставленные данные сообщат об исключении; во-вторых, внутренний хранение данных json выполнено.Оптимизированное хранилище, можно быстро читать данные типа json, например, нет необходимости преобразовывать двоичный json в текстовую форму для чтения;
Этот набор руководств
- Введение в MYSQL(1)
- Поиск MYSQL(2)
- Поиск MySQL(3)
- MYSQL вставить обновление удалить (4)
- MYSQL штучки (5)
- Тип данных MYSQL(6)
- Операция со структурой таблицы MYSQL (7)
- Представление MYSQL(8)
- Хранимая процедура MYSQL (9)
- Курсоры и триггеры MYSQL(10)
- Управление правами пользователей MYSQL (11)
- Введение в архитектуру MYSQL(12)
- Ожидание блокировки MYSQL и взаимоблокировка (13)
- Операция MYSQLl json (14)
- План выполнения MYSQL(15)
- Индекс MYSQL(16)
Нет публики:искатель знаний
Искатель знаний (Наследуя дух открытого исходного кода, Распространение знаний о технологиях;)
Две операции 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'
в[1] — второй объект в josn;
Пример
["6","2",{"east": "50", "south": "65"}]
[1] равно "2" ,[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"]