# Preparation Phase
+ Use `PREPARE` to create a prepared statement:
  + `PREPARE statement_name FROM statement;` 
  + `statement_name` is an identifier that you can refer to later, it is case insensitive
  + `statement` can be a string literal or a user variable that contains the text of the SQL statement
    + Use `?` characters as placeholder to indicate where data values will be bound to the statement when the statement is executed
    + Only use placeholders to represent data values, not SQL keyword, table names, or column names, etc.
    + Don't enclose placeholders in quotes, even if what you expect is a string value
+ Prepared statement exists only in the session in which the statement was created

------------------------------------------------------------
You can prepare a complete statement or an incomplete statement. Complete statements contain all the SQL code and values required to execute the statement. Incomplete statements contain placeholders for data values that are unknown at preparation time. These placeholders are denoted by question mark '?’ characters. When you execute the statement, you must provide specific data values, one for each parameter in the statement. The server replaces the markers with the data values you provide to complete the statement. You can use a different value each time you execute the statement.

If you attempt to prepare a statement with the same name as one that already exists, TiDB deallocates the current statement before preparing the new one. If the new statement cannot be prepared for any reason, TiDB raises an error and does not re-create the previous statement.

The prepared statement exists only as long as the session that created it and is not available to other client connections. If the session ends for any reason, its prepared statements are automatically deallocated.

