サーバー側では、C APIのmysql_stmt_attr_set()関数を呼び出してカーソル機能を実装できますが、一定の使用制限があります。
サーバー側カーソルは、サーバー側で結果セットを生成することを許可しますが、結果セット内のクライアントリクエスト行のみをクライアントに転送します。たとえば、クライアントが実行したクエリが最初の1行のデータのみを取得したい場合、残りの行はクライアントに転送されません。
さらに、カーソルには以下の使用制限もあります:
カーソルは読み取り専用であり、カーソルを使用して行を更新することはできないため、
UPDATE WHERE CURRENT OFおよびDELETE WHERE CURRENT OFはサポートされていません。カーソルは保持されないため、コミット後に開いた状態を維持しません。
カーソルは不感応です。
カーソルはロールバックできません。
カーソルに名前を付けることはできず、ステートメントハンドルを使用してカーソルIDを取得します。
各Preparedステートメントは、1つのカーソルしか開けません。カーソルの数はPreparedステートメントの数と一致します。
Preparedモードで結果セットを生成できないステートメントでは、そのステートメントに対してカーソルを使用することはできません。これには
CHECK TABLE、HANDLER READ、SHOW BINLOG EVENTSなどのステートメントが含まれます。