Если вы не понимаете или не знаете о курсорах в MySQL, вы можете прийти и посмотреть.
Если вы не понимаете или не знаете о курсорах в MySQL, вы можете прийти и посмотреть.

1.Что такое курсор?

Курсор — это запрос к базе данных, хранящийся на сервере MySQL. Это не оператор SELECT, а набор результатов, полученный этим оператором. После сохранения курсора приложение может прокручивать или просматривать данные внутри него по мере необходимости.

Примечание. Курсоры MySQL можно использовать в хранимых процедурах, функциях, триггерах и событиях.

2. Характеристики курсора

  • база данных Вы также можете не копировать набор результатов
  • Не обновляется
  • Курсор может перемещаться только в одном направлении и не может пропустить ни одну строку данных. Чтобы использовать курсор, вы должны сначала определить переменную курсора.

3. Создайте курсор

Перед созданием курсора нам необходимо очистить синтаксис курсора.

1. Определите курсор

Имя курсора DECLARE CURSOR FOR SQL-оператор;

2. Откройте курсор

имя курсора OPEN;

3. Получите результаты

FETCH имя курсора INTO имя переменной[, имя переменной];

4. Закройте курсор

Имя курсора ЗАКРЫТЬ;

В качестве примера возьмем таблицу «Клиенты».

Пример 1

Определите хранимую процедуру и выполните курсор внутри нее при вызове

Язык кода:javascript
копировать
CREATE PROCEDURE PROC1()
BEGIN
    -- Определите две переменные для хранения результатов
    DECLARE NAME VARCHAR(20);
    DECLARE ADDR VARCHAR(50);
    -- Объявить курсор
    DECLARE MY CURSOR FOR SELECT имя, адрес FROM customers;
    -- открытый курсор
    OPEN MY;
    -- Получите результаты
    FETCH MY INTO NAME,ADDR;
    -- Вот чтобы показать получение результаты
    SELECT NAME,ADDR;
    -- Закрыть курсор
    CLOSE MY;    
END;

После выполнения указанной выше хранимой процедуры мы можем вызвать хранимую процедуру.

Язык кода:javascript
копировать
CALL PROC1();

Получите результат:

Здесь наверняка есть друзья, которым интересно. В таблице клиентов явно 7 записей, почему отображается только 1 запись?

Это связано с тем, что переменная курсора сохраняет только первую строку данных в таблице клиентов. Если вы хотите просмотреть последующие данные, вам нужно циклически перемещать курсор вниз, чтобы продолжить просмотр.

Пример 2

Определите хранимую процедуру. При вызове хранимой процедуры данные из таблицы клиентов будут циклически записываться в новую таблицу.

Язык кода:javascript
копировать
CREATE PROCEDURE PROC2()
BEGIN
    -- Определите две переменные для хранения результатов
    DECLARE FLAG INT DEFAULT 0; 
    DECLARE NAME VARCHAR(20);
    DECLARE ADDR VARCHAR(50);
    -- Объявить курсор
    DECLARE MY CURSOR FOR SELECT имя, адрес FROM customers;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET FLAG=1;
    -- открытый курсор
    OPEN MY;
    -- петля часть тела
    L1:LOOP
    -- Получите результаты
    FETCH MY INTO NAME,ADDR;
    IF FLAG=1 THEN
       LEAVE L1;
    END IF;
    -- Вот чтобы показать получение результаты
    INSERT INTO cus VALUES(NAME,ADDR);
    -- Закрыть курсор
    END LOOP;  -- конец цикла
    CLOSE MY;    
END;

Затем мы выполняем эту хранимую процедуру и запрашиваем данные в таблице cus.

Язык кода:javascript
копировать
CALL PROC2();SELECT * FROM cus;

результат:

Результаты совпадают с результатами у клиентов, но эти результаты вставляются при движении цикла вниз один за другим, то есть этот цикл выполняется 7 раз.

Вышеуказанное является основным принципом работы курсора. Кроме того, тело цикла курсора также имеет методы работы, такие как WHILE и REPEAT. Их методы работы аналогичны LOOP, и они используются для выполнения содержимого тела цикла. циклически до конца цикла.

4.Сценарии использования

Когда мы запрашиваем данные через sql,

1. Обычный способ — отправить оператор SQL, и сервер вернет вам все данные. Другой способ.

2. Метод курсора. Метод курсора находит запрашиваемые данные на стороне сервера и затем возвращает их вам в пакетном режиме. Этот метод подходит для сценариев, когда сервер должен обрабатывать большой объем оперативных данных. мне один кусок, а я обрабатываю один кусок, а потом продолжаю обработку в цикле. В конце клиент не получит все данные сразу.

Первый метод вызовет проблемы с утечкой памяти.

Второго не будет, но он будет занимать ссылку на сервер надолго.

Простое понимание курсора таково: сообщить серверу набор результатов данных, который я хочу запросить, а затем вернуть его мне пакетами для медленной обработки.

я участвуюВторой этап специального тренировочного лагеря Tencent Technology Creation 2023 года включает в себя эссе, получившие призы, которые разделят призовой фонд в 10 000 юаней и часы с клавиатурой.

я участвуюТема базы данных сообщества разработчиков облачных технологий Tencent. Конкурс эссе, получивший приз.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose