サーバサイドカーソルは、mysql_stmt_attr_set()
関数を介して C API に実装されます。ストアド
ルーチンのカーソルにも同じ実装が使用されます。サーバサイドカーソルによって、結果セットをサーバ側で生成することが可能になりますが、クライアントが請求した行以外をクライアントに転送することはできません。例えば、もしクライアントがクエリを実行し、しかし最初の行しか必要としない場合は、残りの行は転送されません。
MySQL
では、サーバサイドカーソルは一時テーブルへと出力されます。最初、これは
MEMORY
テーブルになりますが、そのサイズが
max_heap_table_size
システム変数の値に達すると、MyISAM
テーブルに変換されます。この実装の制限のひとつとして、大きな結果セットでは、カーソルでの行の呼び出しに時間がかかる場合があります。
カーソルは読み取り専用で、カーソルを行のアップデートに使用することはできません。
UPDATE WHERE CURRENT OF および
DELETE WHERE CURRENT OF
は、アップデート可能なカーソルはサポートされていないため実装されていません。