説明
このステートメントは、単一のテーブルから複数のテーブルまで、条件に一致する行(データ)を削除するために使用されます。
制限事項と注意点
複数テーブルの削除であっても単一テーブルの削除であっても、サブクエリに対して直接削除操作を行うことはサポートされていません。例えば、DELETE FROM (SELECT * FROM t1); というような書き方はできません。
権限要件
DELETE ステートメントを実行するには、現在のユーザーが操作対象のテーブルに対する DELETE 権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
single_table_delete_syntax:
DELETE [hint_options] [IGNORE]
FROM table_name
[PARTITION (partition_name_list)]
[WHERE where_condition_list]
[ORDER BY order_expression_list]
[LIMIT row_count];
partition_name_list:
partition_name [, partition_name ...]
where_condition_list:
where_condition [, where_condition ...]
where_condition:
expression
order_expression_list:
order_expression [, order_expression ...]
order_expression:
expression [ASC | DESC]
multiple_table_delete_syntax:
DELETE [hint_options]
table_name_list
FROM table_references
[WHERE where_condition_list];
Or:
DELETE [hint_options]
FROM table_name_list
USING table_references
[WHERE where_condition_list];
table_name_list:
table_name[.*] [, table_name[.*] ...]
table_references:
table_reference [, table_reference ...]
table_reference:
table_name
| joined_table
| table_subquery
パラメータの説明
| パラメータ | 説明 |
|---|---|
| single_table_delete-syntax | 単一テーブルから行を削除するSQL構文を表します。 |
| hint_options | オプションで、hintオプションを指定します。Hintの詳細については、Optimizer Hintを参照してください。 |
| IGNORE | オプションで、行を削除する際に無視可能なエラーを無視します。現在のバージョンではこのキーワード構文のみがサポートされており、機能は有効ではありません。 |
| table_name | 削除するデータのテーブル名を指定します。 |
| PARTITION (partition_name_list) | オプションで、削除するデータのパーティション名リストを指定します。複数のパーティションデータを削除する場合は、パーティション名を英字のカンマで区切ります。パーティションデータの削除の詳細については、以下のpartition_nameを参照してください。 |
| WHERE where_condition_list | オプションで、特定の行を削除するためのフィルタ条件リストを指定します。WHERE句がない場合、すべての行が削除されます。特定の条件のデータを削除する詳細については、以下のwhere_conditionを参照してください。 |
| ORDER BY order_expression_list | オプションで、削除する行のソートキーのリストを指定します。通常はLIMIT句と一緒に使用します。削除順序の詳細については、以下のorder_expressionを参照してください。 |
| LIMIT row_count | オプションで、最大削除行数を指定します。row_countの値は整数である必要があります。 |
| multiple_table_delete_syntax | 複数テーブルから行を削除するSQL構文を表します。 |
| table_name_list | 削除するデータのテーブルのリストを指定します。
注意
|
| table_references | データを削除するテーブルまたはテーブルの組み合わせ、つまり複数テーブル削除時に指定する選択対象のテーブルシーケンスを指定します。詳細については、以下のtable_referenceを参照してください。
注意
|
partition_name
partition_name : 削除するデータのパーティション名を指定します。
例:
テーブル
tbl1を作成し、テストデータを挿入します。CREATE TABLE tbl1(col1 INT, col2 VARCHAR(20)) PARTITION BY HASH(col1) PARTITIONS 5;INSERT INTO tbl1 VALUES(1, 'A1'),(2, 'A2'),(3, 'A3'),(4, 'A4'),(5, 'A5'),(6, 'A6'),(7, 'A7'),(8, 'A8'),(9, 'A9');テーブル
tbl1内のp0およびp1パーティションのデータを確認します。SELECT * FROM tbl1 PARTITION(p0, p1);実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 5 | A5 | | 1 | A1 | | 6 | A6 | +------+------+ 3 rows in setテーブル
tbl1内のp0およびp1パーティションのデータを削除します。DELETE FROM tbl1 PARTITION(p0, p1);実行結果は次のとおりです:
Query OK, 3 rows affected
where_condition
expression : 削除する行をフィルタリングするために使用できる条件式を指定します。
例:
テーブル
tbl1内のcol1 = 2のデータを確認します。SELECT * FROM tbl1 WHERE col1 = 2;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 2 | A2 | +------+------+ 1 row in setテーブル
tbl1内のcol1 = 2のデータを削除します。DELETE FROM tbl1 WHERE col1 = 2;実行結果は次のとおりです:
Query OK, 1 row affected
order_expression
expression [ASC \| DESC]:昇順(ASC、デフォルト値)または降順(DESC)でソートするための式を指定します。
例:
テーブル
tbl1のデータを確認します。SELECT * FROM tbl1;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 7 | A7 | | 3 | A3 | | 8 | A8 | | 4 | A4 | | 9 | A9 | +------+------+ 5 rows in setテーブル
tbl1から列col1に基づいて降順ソートされた最初の行(つまり、ソート後の最大値の行)を削除します。DELETE FROM tbl1 ORDER BY col1 DESC LIMIT 1;実行結果は次のとおりです:
Query OK, 1 row affected再度テーブル
tbl1のデータを確認します。SELECT * FROM tbl1;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 7 | A7 | | 3 | A3 | | 8 | A8 | | 4 | A4 | +------+------+ 4 rows in set
table_reference
table_reference:SQL文において、参照対象となる部分、すなわち参照方法を指します。具体的には以下の通りです:
table_name:テーブル名を表し、パーティションを指定してデータを削除することもできます。例:
テーブル
tbl2を作成し、テストデータを挿入します。CREATE TABLE tbl2(col1 INT PRIMARY KEY, col2 INT);INSERT INTO tbl2 VALUES(1,1),(2,2),(3,3),(4,4),(5,5);テーブル
tbl3を作成し、テストデータを挿入します。CREATE TABLE tbl3(col1 INT PRIMARY KEY, col2 INT) PARTITION BY KEY(col1) PARTITIONS 4;INSERT INTO tbl3 VALUES(1,11),(2,22),(3,3),(6,66),(7,77),(8,88);tbl2とtbl3のテーブルからtbl2.col1 = tbl3.col1 AND tbl2.col2 = tbl3.col2のデータを削除します。DELETE tbl2, tbl3 FROM tbl2, tbl3 WHERE tbl2.col1 = tbl3.col1 AND tbl2.col2 = tbl3.col2;または
DELETE FROM tbl2, tbl3 USING tbl2, tbl3 WHERE tbl2.col1 = tbl3.col1 AND tbl2.col2 = tbl3.col2;tbl3テーブルのp0パーティションとtbl2テーブルからtbl2.col1 = tbl3.col1を満たすデータを削除します。DELETE tbl3 FROM tbl2,tbl3 PARTITION(p0) WHERE tbl2.col1 = tbl3.col1;
joined_table:結合されたテーブルを表します。複数のテーブルを指定し、JOINで結合することができます。例:
tbl3のcol1が1より大きく、かつtbl2のcol1と等しいレコードをtbl2から削除します。DELETE tbl2 FROM tbl2 INNER JOIN tbl3 ON tbl2.col1 = tbl3.col1 WHERE tbl2.col1 > 1;table_subquery:サブクエリのテーブルを表します。例:
サブクエリを使用して、
tbl2とtbl3テーブルからtbl3.col1 < 2 AND tbl2.col1 = t3.col1の行を削除します。DELETE FROM t2, t3 USING tbl2 t2, (SELECT * FROM tbl3 WHERE tbl3.col1 < 2) t3 WHERE t2.col1 = t3.col1;
例
更新可能なビューを削除します。
テーブル
test_tbl1を作成し、テストデータを挿入します。CREATE TABLE test_tbl1(col1 INT PRIMARY KEY, col2 INT);INSERT INTO test_tbl1 VALUES(1,1),(2,2),(3,3);ビュー
v1を作成します。CREATE VIEW v1 AS SELECT * FROM test_tbl1;v1のデータを確認します。SELECT * FROM v1;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | +------+------+ 3 rows in setビュー
v1からcol1 = 1の値を削除します。DELETE FROM v1 WHERE col1 = 1;再び
v1のデータを確認します。SELECT * FROM v1;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 2 | 2 | | 3 | 3 | +------+------+ 2 rows in set