Я хотел бы узнать, как на самом деле работают курсоры MySql.У меня есть сервер MySQL 5.6 и я хочу запустить сложную хранимую процедуру, которая обновляет строки в одной таблице и делает вставки в другую.Моя проблема заключается в неправильном понимании того, как на самом деле работают курсоры в MySQL.
- В официальных справочных документах (https://dev.mysql.com/doc/refman/5.6/en/cursors.html) курсоры называются "Asensitive: сервер может или не может сделать копиюего таблица результатов", что означает, что курсоры не создают никакой временной копии данных, если вы не объявляете курсор с
FOR UPDATE
и работает как указатель на фактические данные. - В * Курсоры 1012 * также описаны как «Asensitive: курсор работает быстрее, чем курсор без учета чувствительности, потому что он не должен делать временную копию данных . Однако любое изменение, внесенное в данные издругие соединения будут влиять на данные, которые используются чувствительным курсором , поэтому безопаснее, если вы не обновите данные, которые используются чувствительным курсором. MySQL курсор является чувствительным. "
Но в документации разработчика (https://dev.mysql.com/doc/mysql-reslimits-excerpt/5.6/en/cursor-restrictions.html) я вижу
"В MySQL серверный
курсор материализуется во внутреннюю временную таблицу . Первоначально это таблица MEMORY, но она преобразуется в таблицу MyISAM, когда ее размер превышает минимальное значениеСистемные переменные max_heap_table_size и tmp_table_size. Те же самые ограничения применяются к внутренним временным таблицам, созданным для хранения результирующего набора для курсора, как и для других применений внутренних временных таблиц. "изменения в таблице не повлияют на данные курсора.
Можете ли вы сказать мне, как на самом деле работают курсоры в MySQL?Я хотел бы создать курсор на большой таблице в моей хранимой процедуре и не хочу создавать копию данных.