DELETE

行全体を、または1つ以上の行から1つ以上のカラムを削除します。

行全体を、または1つ以上の行から1つ以上のカラムを削除します。

構文 

DELETE column_name, ...|(column_name term)FROM keyspace_name.table_name USING TIMESTAMP integer WHERE row_specification(IF( EXISTS |( condition( AND condition). . .) ) )

termは以下のとおりです。

[ list_position ] | key_value

row_specificationは以下のいずれかです。

primary_key_name = key_value primary_key_name IN ( key_value, key_value, ...)
conditionは以下のとおりです。
column_name = key_value | column_name [list_position] = key_value

構文の凡例 

  • 大文字はリテラルを意味する
  • 小文字は、リテラルでないことを意味する
  • イタリック体は指定が任意であることを意味する
  • パイプ(|)記号はORまたはAND/ORを意味する
  • 省略記号(...)は繰り返し可能を意味する
  • 範囲記号「(」および「)」はリテラルではなく、範囲を示す

この構文には、CQL文の終了となるセミコロンは含まれていません。

説明 

DELETE文は、1つ以上のカラムをテーブル内の1つ以上の行から削除するか、またはカラムが指定されていない場合は、行全体を削除します。Cassandraでは、同じパーティション・キー内の選択をアトミックかつ個別に適用します。

カラムまたは行の削除 

DELETEキーワードの後に、カラム名をコンマで区切ってリストすることもできます。

DELETE col1, col2, col3 FROM Planeteers WHERE userID = 'Captain';

カラム名を指定しないと、WHERE句で指定した行全体が削除されます。

DELETE FROM MastersOfTheUniverse WHERE mastersID IN ('Man-At-Arms', 'Teela');

カラムを削除しても、ディスクからはすぐに削除されません。削除されたカラムはトゥームストーンでマークされ、構成した猶予期間が経過すると削除されます。任意指定のタイムスタンプは、新しいトゥームストーン・レコードを定義します。

カラムの条件付き削除 

Cassandra 2.0.7以降では、IFまたはIF EXISTSを使用してカラムを条件付きで削除できます。カラムの削除は、条件付きで挿入または更新することに似ています。条件付き削除は、多大なパフォーマンス・コストが発生するので、慎重に使用する必要があります。

テーブルの指定 

テーブル名は、カラム名のリストとキーワードFROMの後に指定します。

古いデータの削除 

タイムスタンプを使用して、削除するカラムを識別できます。

DELETE email, phone FROM users USING TIMESTAMP 1318452291034 WHERE user_name = 'jsmith';

TIMESTAMP入力はマイクロ秒を表す整数です。WHERE句では、テーブルから削除する行を指定します。

DELETE col1 FROM SomeTable WHERE userID = 'some_key_value';

以下の形式では、IN表記と、かっこで囲まれたコンマ区切りのキー名のリストを使用して、キー名のリストを指定しています。

DELETE col1 FROM SomeTable WHERE userID IN (key1, key2); DELETE phone FROM users WHERE user_name IN ('jdoe', 'jsmith');

Cassandra 2.0以降、CQLでは、IN句に値の空のリストを使用できるようになりました。Javaドライバー・アプリケーションで空の配列をIN句の引数として渡す場合に役立ちます。

コレクション・セット、リスト、またはマップの使用 

マップから要素を削除するには、DELETEコマンドを使用し、要素のキーを大かっこで囲んで指定します。

DELETE todo ['2012-9-24'] FROM users WHERE user_id = 'frodo';

リストから要素を削除するには、DELETEコマンドを使用し、リストのインデックス位置を大かっこで囲んで指定します。

DELETE top_places[3] FROM users WHERE user_id = 'frodo';

セットからすべての要素を削除するには、DELETE文を使用します。

DELETE emails FROM users WHERE user_id = 'frodo';