CQL for Cassandra 2.0

Prepared statements

CQL supports prepared statements. Using a prepared statement, Cassandra parses a query only once, but executes it multiple times with different concrete values.

In a statement, each time a column value is expected in the data manipulation and query statements, a bind variable marker can be used instead. A statement with bind variables must then be prepared. During execution of the prepared statement, concrete values for bind variables are provided in the order the bind variables are defined in the query string.

Use bind variables, a ? in these examples, to represent these values:
  • INSERT statement values
    INSERT INTO playlists (id, song_order, song_id, title, artist, album)
        VALUES (62c36092-82a1-3a00-93d1-46196ee77204, 1,
        a3e64f8f-bd44-4f28-b8d9-6938726e34d4, '?', '?', '?');
  • Values on the right side of the = operator in the SET and clauses of the UPDATE statement
    UPDATE users
      SET name = '?',
      email = '?'
      WHERE user_uuid = ?;
  • Values on the right side of the IN or = operators in the WHERE clause of the DELETE statement
    DELETE email, phone
        FROM users
        USING TIMESTAMP 1318452291034
        WHERE user_name = '?';
  • Values for the TIMESTAMP and TTL properties of the UPDATE statement
    UPDATE myTable USING TTL ? SET v = 2 WHERE k = 'foo'; 
  • Value of the LIMIT property in a SELECT statement
    SELECT * FROM myTable LIMIT ?;

The exact procedure to prepare a statement and execute a prepared statement depends on the CQL driver used and is beyond the scope of this document. The Java Driver documentation includes an example.

Cassandra 2.0 and later support a query that uses bind variables even though the statement is not prepared. In Cassandra 2.0.1 (CQL 3.1.1) and later, you can use named bind variables (:name instead of ?).