Курсоры в MySQL - создают ли они временную таблицу или нет - PullRequest
0 голосов
/ 23 января 2019

Я хотел бы узнать, как на самом деле работают курсоры MySql.У меня есть сервер MySQL 5.6 и я хочу запустить сложную хранимую процедуру, которая обновляет строки в одной таблице и делает вставки в другую.Моя проблема заключается в неправильном понимании того, как на самом деле работают курсоры в MySQL.

  1. В официальных справочных документах (https://dev.mysql.com/doc/refman/5.6/en/cursors.html) курсоры называются "Asensitive: сервер может или не может сделать копиюего таблица результатов", что означает, что курсоры не создают никакой временной копии данных, если вы не объявляете курсор с FOR UPDATE и работает как указатель на фактические данные.
  2. В * Курсоры 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?Я хотел бы создать курсор на большой таблице в моей хранимой процедуре и не хочу создавать копию данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...