# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English

# 7.3.21. `delete`

## 7.3.21.1. 概要

`delete` コマンドは指定したテーブルのレコードを削除します。

### 7.3.21.1.1. カスケード削除

複数のテーブルが関連付けられていることがあります。例えば、あるテーブルのキーが他のテーブルのレコードで参照されているような場合です。そのような場合にそのテーブルのキーを削除するなら、他のテーブルのレコードも削除されます。

他のテーブルのカラムの型がCOLUMN_VECTORなら、ベクターで参照しているキーだけが削除されます。

## 7.3.21.2. 構文

    delete table [key [id [filter]]]

## 7.3.21.3. 使い方

使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

"2"をキーとしてもつEntryテーブルからレコードを削除します。

実行例:

    delete Entry 2
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    select Entry
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "UInt32"
    #         ],
    #         [
    #           "status",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         1,
    #         "OK"
    #       ]
    #     ]
    #   ]
    # ]

以下はカスケード削除の例です。

UsersテーブルのcountryカラムはCountryテーブルと関連しています。

"カスケード削除"は指定されたキーやそのキーを参照しているレコードを削除します。

実行例:

    table_create Country TABLE_HASH_KEY ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Users TABLE_HASH_KEY UInt32
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Users name COLUMN_SCALAR ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Users country COLUMN_SCALAR Country
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    load --table Users
    [
    {"_key": 1, "name": "John", country: "United States"}
    {"_key": 2, "name": "Mike", country: "United States"}
    {"_key": 3, "name": "Takashi", country: "Japan"}
    {"_key": 4, "name": "Hanako", country: "Japan"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 4]
    load --table Country
    [
    {"_key": "United States"}
    {"_key": "Japan"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 2]
    delete Country "United States"
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    select Country
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         2,
    #         "Japan"
    #       ]
    #     ]
    #   ]
    # ]
    select Users
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         4
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "UInt32"
    #         ],
    #         [
    #           "country",
    #           "Country"
    #         ],
    #         [
    #           "name",
    #           "ShortText"
    #         ]
    #       ],
    #       [
    #         1,
    #         1,
    #         "",
    #         "John"
    #       ],
    #       [
    #         2,
    #         2,
    #         "",
    #         "Mike"
    #       ],
    #       [
    #         3,
    #         3,
    #         "Japan",
    #         "Takashi"
    #       ],
    #       [
    #         4,
    #         4,
    #         "Japan",
    #         "Hanako"
    #       ]
    #     ]
    #   ]
    # ]

## 7.3.21.4. 引数

`table`

> レコードを削除するテーブルの名前を指定します。

`key`

> 削除するレコードのキーを指定します。TABLE_NO_KEYを対象となるテーブルに使用しているなら、指定したキーは無視されます。(そのような場合には 引数 `id` を使います。)

`id`

> 削除するレコードのIDを指定します。 引数 `id` を指定する場合、引数 `key` を指定してはいけません。

`filter`

> レコードを特定するためのgrn_exprの式を指定します。引数 `filter` を指定するなら、引数 `key` や `id` を指定してはいけません。

## 7.3.21.5. 戻り値

    [HEADER, SUCCEEDED_OR_NOT]

`HEADER`

> `HEADER` については 出力形式 を参照してください。

`SUCCEEDED_OR_NOT`

> コマンドの実行が成功するとtrueを返します。失敗するとエラーとしてfalseを返します。

## 7.3.21.6. 参考

load