目次
2. GaussDB の DROP & TRUNCATE & DELETE の簡単な紹介
3. GaussDB の DROP TABLE コマンドと例
I.はじめに
データベースでは、一般的に使用されるデータベース プログラミング言語として SQL が重要な役割を果たします。SQL は、データベースの作成、変更、クエリに使用できるだけでなく、DROP、DELETE、TRUNCATE などのステートメントを使用してデータを削除することもできます。これらのステートメントは SQL 言語で最も一般的に使用されるコマンドであり、さまざまな意味と使用シナリオがあります。
この記事では、GaussDB データベースをプラットフォームとして使用し、SQL の DROP、TRUNCATE、DELETE などのステートメントの意味、使用シナリオ、注意事項を詳しく紹介し、読者がこれらの一般的に使用されるデータベース操作コマンドをよりよく理解し、使いこなすのに役立ちます。
2. GaussDB の DROP & TRUNCATE & DELETE の簡単な紹介
1.簡単な紹介
- DROPステートメントは、テーブル構造とデータを含むテーブル全体を削除できます。
- TRUNCATEステートメントはテーブル内のすべてのデータを迅速に削除できますが、テーブル構造は削除されません。
- DELETEステートメントは、条件に従ってテーブル内のデータを削除できますが、テーブル構造は含まれません。
2.コマンドの比較
カテゴリー |
落とす |
切り詰める |
消去 |
SQLの種類 |
DDL |
DDL |
DML |
コンテンツを削除する |
テーブル構造、インデックス、権限などを含むテーブルのすべてのデータを削除します。 |
テーブル内のすべてのデータ、または指定したパーティションのデータを削除します |
テーブルのすべてまたは一部の (+ 条件付き) データを削除します |
実行速度 |
最速 |
中速 |
最も遅い |
ヒント: GaussDB データベースでは、DROP はデータベース内のオブジェクトを定義または変更するために使用されるコマンドの 1 つです。オブジェクトには主にライブラリ、スキーマ、テーブルスペース、テーブル、インデックス、ビュー、ストアドプロシージャ、関数、暗号化キーなどが含まれます。今回はテーブルに対する操作のみを対象とします。
3. GaussDB の DROP TABLE コマンドと例
1.機能説明
DROP TABLE の機能は、既存のテーブルを削除することです。
2.文法
DROP TABLE [IF EXISTS] [db_name.]table_name;
注: SQL に [IF EXISTS] を追加すると、テーブルが存在しないことによる実行エラーを防ぐことができます。
パラメータ: db_name: データベース名。指定しない場合は、現在のデータベースが選択されます。table_name: 削除するテーブルの名前。
3.例
次の例は、次の SQL ステートメントを順番に実行する DROP コマンドの使用法を示しています。
--删除整个表course
DROP TABLE IF EXISTS course
--创建course表
CREATE TABLE course(cid VARCHAR(10),cname VARCHAR(10),teid VARCHAR(10));
--初始化数据
INSERT INTO course VALUES('01' , '语文' , '02');
INSERT INTO course VALUES('02' , '数学' , '01');
INSERT INTO course VALUES('03' , '英语' , '03');
--3条记录
SELECT count(1) FROM course;
--删除整个表
DROP TABLE IF EXISTS course
--查看结果,表不存在(表结构及数据不存在)
SELECT count(1) FROM course;
1) DROP TABLE、プロンプトテーブルが存在しません
2) 実験テーブルの作成と初期化
3) DROP TABLE が正常に実行されました
4) 実行結果の表示
4. GaussDB の TRUNCATE コマンドと例
1.機能説明
テーブルまたはテーブル パーティションからすべてのデータを削除すると、TRUNCATE はテーブルからすべての行をすばやく削除します。これはターゲット テーブルに対する無条件 DELETE と同じ効果がありますが、TRUNCATE はテーブル スキャンを行わないため、はるかに高速で、使用するシステム リソースとトランザクション ログ リソースが少なくなります。大きなテーブルでは操作の効果がより顕著になります。
TRUNCATE TABLE はテーブル内のすべての行を削除しますが、テーブル構造とその列、制約、インデックスなどは変更されません。新しい行の識別に使用されるカウント値は、列のシードにリセットされます。
2.文法
TRUNCATE [TABLE] table_name;
または
ALTER TABLE [IF EXISTS] table_name TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) }
パラメータ: table_name: データを削除する必要があるテーブルの名前。Partition_name: 削除するパーティション テーブルのパーティション名。Partition_value: 削除するパーティション テーブルのパーティション値。
3.例 1
次の例は、TRUNCATE コマンドの使用法を示しています。
--创建course表
DROP TABLE IF EXISTS course;
CREATE TABLE course(cid VARCHAR(10),cname VARCHAR(10),teid VARCHAR(10));
--初始化数据
INSERT INTO course VALUES('01' , '语文' , '02');
INSERT INTO course VALUES('02' , '数学' , '01');
INSERT INTO course VALUES('03' , '英语' , '03');
--3条记录
SELECT count(1) FROM course;
--清空表
TRUNCATE TABLE course;
--或
TRUNCATE course;
--0条记录
SELECT count(1) FROM course;
1) 実験テーブルの作成とデータの初期化
2) TRUNCATE TABLE が正常に実行されました
3) 実行結果の表示
4.例 2
次の例は、TRUNCATE コマンドのパーティション テーブル データの削除を示しています。
--创建列表分区(LIST)
DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
product_id INT,
quantity INT
) PARTITION BY LIST (customer_id) (
PARTITION p1 VALUES (100),
PARTITION p2 VALUES (200),
PARTITION p3 VALUES (300),
PARTITION p4 VALUES (400),
PARTITION p5 VALUES (500)
);
--插入测试数据
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1001,100,date'20230822',1,10);
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1002,100,date'20230822',2,20);
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1003,100,date'20230822',3,30);
INSERT INTO orders(id,customer_id,order_date,product_id,quantity)VALUES(1004,200,date'20230822',4,40);
--查看分区p1、p2的数据
SELECT * FROM orders WHERE customer_id IN (100,200);
--或
--根据分区名称查询
SELECT * FROM orders PARTITION(p2);
--清空分区p1。
ALTER TABLE orders TRUNCATE PARTITION p1;
--或者
--清空分区p2=200。
ALTER TABLE orders TRUNCATE PARTITION for (200);
--查看分区p1、p2的数据
SELECT * FROM orders WHERE customer_id IN (100,200);
1) 実験テーブルの作成と初期化
2) パーティションに従ってデータを削除します
5. GaussDB の DELETE コマンドと例
1.機能説明
指定されたテーブルから WHERE 句を満たす行を削除します。WHERE 句が存在しない場合、テーブル内のすべての行が削除され、結果としてテーブル構造のみが残ります。
2.注意すべき事項
- LIMIT は DELETE ステートメントではサポートされていません。WHERE 条件は、更新する必要があるターゲット行を指定するために使用する必要があります。
- 単一の SQL ステートメントでの複数のテーブルの削除はサポートされていません。
- テーブル全体のスキャンを回避するには、DELETE ステートメントに WHERE 句が必要です。
- 不要な並べ替えを避けるために、ORDER BY 句と GROUP BY 句を DELETE ステートメントで使用しないでください。
- テーブルをクリアする必要がある場合は、DELETE ではなく TRUNCATE を使用することをお勧めします。
- TRUNCATE は、新しい物理ファイルを作成し、トランザクションの終了時に元のファイルを物理的に削除してディスク領域をクリアします。DELETE はテーブル内のデータにマークを付けますが、VACCUUM FULL 段階になるまで実際にはディスク領域をクリーンアップしません。
- DELETE に主キーまたはインデックスを持つテーブルがある場合、実行効率を向上させるために WHERE 条件を主キーまたは主インデックスと組み合わせる必要があります。
- DELETE ステートメントは一度に 1 行を削除し、削除された行ごとにトランザクション ログにエントリを記録します。
- ID カウント値を保持したい場合は、代わりに DELETE を使用してください
3.文法
DELETE FROM table_name [WHERE condition];
パラメータ: table_name: データを削除する必要があるテーブルの名前。条件: どの行を削除する必要があるかを判断するために使用されます。
4.例
前の実験テーブルを再利用します。
DELETE FROM orders WHERE customer_id <200;
1) 注文テーブル内の customer_id <200 のデータをすべて削除します。
6. 応用シナリオ
- 特定のビジネス条件に従ってデータを削除する必要があり、データ量とパフォーマンスを制御できる場合は、DELETE の使用を検討できます。
- TRUNCATE は、大量のデータを削除する必要があり、高速性、高効率性、および元に戻す必要がないことが必要な場合に使用できます。
- エンタープライズレベルの開発では、物理的な削除ではなく、論理的な削除が実際に実行されます (データが「削除」されて処理されます)。
- 実際の本番環境では、ビジネスプロセス上のデータ(遷移表)は削除されるのが一般的です。
- 実際の企業の開発および保守プロセスでは、DELETE、TRUNCATE、または DROP コマンドを使用する前にデータのバックアップを考慮する必要があります。
7. まとめ
GaussDB などのデータベースでは、DROP、TRUNCATE、DELETE がデータを削除するためによく使用されるコマンドです。しかし、実際のビジネス利用では、さまざまなニーズに応じて正確に選択する必要がありますが、どのデータ削除方法を選択する場合でも、データのセキュリティを考慮する必要があります。重要なことは 3 回言います。「バックアップ」です。バックアップしてください!バックアップしてください!
- 仕上げる。