# `PREPARE` フェーズ
+ **`PREPARE`** を使用してプリペアドステートメントを作成します
  + **`PREPARE {statement_name} FROM {statement}`**
  + **`{statement_name}`**は後で参照できる識別子で、大文字と小文字は区別されません
  + **`{statement}`** は、文字列リテラルでも、`SQL` ステートメントのテキストを含むユーザー変数でもかまいません
    + **`?`**文字をプレースホルダーとして使用して、ステートメントの実行時にデータ値がステートメントにバインドされる場所を指定します
    + プレースホルダはデータ値を表すためにのみ使用し、`SQL`のキーワード、テーブル名、カラム名などは表さないでください
    + 期待しているのが文字列値であっても、プレースホルダーを引用符で囲まないでください
+ プリペアドステートメントは、ステートメントが作成されたセッションにのみ存在する

------------------------------------------------------------
完全なステートメントを作成することも、不完全なステートメントを作成することもできます。完全なステートメントには、ステートメントの実行に必要なすべての SQL コードと値が含まれています。不完全なステートメントには、準備時には不明なデータ値のプレースホルダーが含まれています。これらのプレースホルダーは疑問符 `?` 文字で表されます。ステートメントを実行するときには、ステートメントのパラメータごとに 1 つずつ、特定のデータ値を指定する必要があります。サーバーはマーカーをユーザーが指定したデータ値に置き換えてステートメントを完成させます。ステートメントを実行するたびに異なる値を使用できます。

既存のステートメントと同じ名前のステートメントを準備しようとすると、TiDB は新しいステートメントを準備する前に現在のステートメントの割り当てを解除します。何らかの理由で新しいステートメントを作成できない場合、TiDB はエラーを発生させ、前のステートメントを再作成しません。

プリペアドステートメントは、それを作成したセッションの間だけ存在し、他のクライアント接続では使用できません。何らかの理由でセッションが終了すると、そのプリペアドステートメント割り当ては自動的に解除されます。

