データベース SQL の 3 つのステートメント (DROP、TRUNCATE、DELETE) の詳細な説明

この記事は、Huawei Cloud Community「GaussDB Database SQL Series - DROP & TRUNCATE & DELETE」、著者: Gauss Squirrel Club Assistant 2 から共有されたものです。

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 [存在する場合] [db_name.]table_name;

注: SQL に [IF EXISTS] を追加すると、テーブルが存在しないことによる実行エラーを防ぐことができます。

パラメータ: db_name: データベース名。指定しない場合は、現在のデータベースが選択されます。table_name: 削除するテーブルの名前。

3. 例

次の例は、DROP コマンドの使用法を示し、次の SQL ステートメントを順番に実行します。

--テーブル全体を削除します 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 コース VALUES('02' , '数学' , '01'); 

INSERT INTO コース VALUES('03' , '英語' , '03'); 

-- 3レコード

SELECT count(1) FROM course; 

--テーブル全体を削除

DROP TABLE IF EXISTS course 

--結果を見ると、テーブルが存在しません(テーブル構造やデータが存在しません) 

SELECT count(1) FROM course;

1) DROP TABLE、テーブルが存在しないことを示すプロンプト

cke_120.png

2) 実験テーブルの作成と初期化

cke_121.png

3) DROP TABLE が正常に実行されました

cke_122.png

4) 実行結果の表示

cke_123.png

4. TRUNCATEコマンドとGaussDBの例

1. 機能説明

テーブルまたはテーブル パーティションからすべてのデータを削除すると、TRUNCATE はテーブルからすべての行をすばやく削除します。これはターゲット テーブルに対して無条件 DELETE を実行するのと同じ効果がありますが、TRUNCATE はテーブル スキャンを実行しないため、はるかに高速で、使用するシステム リソースとトランザクション ログ リソースが少なくなります。操作の効果は、大きなテーブルでより顕著になります。

TRUNCATE TABLE はテーブル内のすべての行を削除しますが、列、制約、インデックスなどのテーブル構造は変更されません。新しい行を識別するために使用されるカウントは、その列のシードにリセットされます。

2. 文法

TRUNCATE [TABLE] テーブル名;

または

ALTER TABLE [IF EXISTS] テーブル名 TRUNCATE PARTITION { パーティション名 | FOR ( パーティション値 [, ...] ) }

パラメータ: table_name: データを削除する必要があるテーブルの名前。Partition_name: 削除する必要があるパーティション テーブルのパーティション名。Partition_value: 削除する必要があるパーティション テーブルのパーティション値。

3. 例 1

次の例は、TRUNCATE コマンドの使用法を示しています。

--コーステーブルの作成

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' , 'Math' , '01'); 

INSERT INTO course VALUES('03' , 'English' , '03'); 

--3 レコード

SELECT count( 1 ) FROM course; 

--テーブルをクリアします

TRUNCATE TABLE course; 

--または

TRUNCATE course; 

--0レコード

SELECT count(1) FROM course;

1) 実験テーブルの作成とデータの初期化

cke_124.png

2) TRUNCATE TABLE が正常に実行される

cke_125.png

3) 実行結果の表示

cke_126.png

4. 例 2

次の例は、パーティション テーブル データを削除する TRUNCATE コマンドを示しています。

--创建列表分区(LIST)

注文が存在する場合はテーブルを削除します。

CREATE TABLE 注文 ( 

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 値 (400)、

パーティション p5 値 (500) 

); 

--插入测试データベース

INSERT INTOorders(id,customer_id,order_date,product_id,quantity)VALUES(1001,100,date'20230822',1,10); 

INSERT INTO 注文(id,customer_id,order_date,product_id,quantity)VALUES(1002,100,date'20230822',2,20); 

INSERT INTO 注文(id,customer_id,order_date,product_id,quantity)VALUES(1003,100,date'20230822',3,30); 

INSERT INTO 注文(id,customer_id,order_date,product_id,quantity)VALUES(1004,200,date'20230822',4,40); 

--分区p1、p2のデータ

SELECT * FROM 注文 WHERE customer_id IN (100,200); 

-- または

-- 分区名に基づいて

SELECT * FROM 注文 PARTITION(p2); 

--清空分区p1。

ALTER TABLE は TRUNCATE PARTITION p1 を命令します。

-- または

-- 清空分区 p2=200。

ALTER TABLE は (200) に対して TRUNCATE PARTITION を命令します。

--分区p1、p2のデータ

SELECT * FROM 注文 WHERE customer_id IN (100,200);

1) 実験テーブルの作成と初期化

cke_127.png

2) パーティションごとにデータを削除します

cke_128.png

5. GaussDB DELETE コマンドと例

1. 機能説明

指定されたテーブルから WHERE 句を満たす行を削除します。WHERE 句が存在しない場合は、テーブル内のすべての行が削除され、テーブル構造のみが残ります。

2. 注意事項

• LIMIT は DELETE ステートメントではサポートされません。WHERE 条件を使用して、更新する必要があるターゲット行を指定する必要があります。

• 単一の SQL ステートメントでの複数のテーブルの削除はサポートされていません。

• テーブル全体のスキャンを避けるために、DELETE ステートメントには WHERE 句が必要です。

• 不必要な並べ替えを避けるために、DELETE ステートメントで ORDER BY 句と GROUP BY 句を使用することは禁止されています。

• テーブルをクリアする必要がある場合は、DELETE ではなく TRUNCATE を使用することをお勧めします。

• TRUNCATE は、新しい物理ファイルを作成し、トランザクションの終了時に元のファイルを物理的に削除してディスク領域をクリアします。DELETE はテーブル内のデータにマークを付けますが、ディスク領域は VACCUUM FULL 段階まで実際にはクリアされません。

• 主キーまたはインデックスを持つテーブルの DELETE 実行効率を向上させるには、WHERE 条件を主キーまたは主インデックスと組み合わせる必要があります。

• DELETE ステートメントは、一度に 1 行を削除し、削除された行ごとにトランザクション ログにエントリを記録します。

• ID カウント値を保持したい場合は、代わりに DELETE を使用してください。

3. 文法

DELETE FROM テーブル名 [WHERE 条件];

パラメータ: table_name: データを削除する必要があるテーブルの名前。条件: どの行を削除する必要があるかを決定するために使用されます。

4. 例

前の実験テーブルを再利用します。

1) 注文テーブル内の customer_id <200 のデータをすべて削除します。

DELETE FROM 注文 WHERE customer_id <200;

cke_129.png

6. 応用シナリオ

• 特定のビジネス状況に基づいてデータを削除する必要があり、データ量とパフォーマンスを制御できる場合は、DELETE の使用を検討できます。

• TRUNCATE は、大量のデータを高速かつ高効率で削除する必要があり、元に戻す必要がない場合に使用できます。

• エンタープライズレベルの開発では、物理的な削除ではなく、論理的な削除 (データに「削除のマーク」が付けられます) が実際に実行されます。

• 実際の本番環境では、業務処理中のデータ(遷移表)は削除されるのが一般的です。

• 実際の企業の開発および保守プロセスでは、DELETE、TRUNCATE、または DROP コマンドを使用する前にデータのバックアップを考慮する必要があります。

7. まとめ

GaussDB などのデータベースでは、DROP、TRUNCATE、DELETE がデータを削除するためによく使用されるコマンドです。しかし、実際のビジネス利用では、さまざまなニーズに応じて正確に選択する必要がありますが、どのデータ削除方法を選択する場合でも、データのセキュリティを考慮する必要があり、重要なことは 3 回言う必要がありますバックアップしてください!バックアップしてください!

クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~

Alibaba Cloudが深刻な障害に見舞われ、全製品に影響(復旧済み) ロシアのオペレーティングシステム「Aurora OS 5.0」、新UIが Tumblrで公開 多くのインターネット企業がHongmengプログラマーを緊急採用 .NET 8が正式にGA、最新版LTS版 UNIX時間 17億時代に突入しようとしている(すでに突入) XiaomiはXiaomi Velaが完全にオープンソースであり、基盤となるカーネルは NuttX Linux上の.NET 8であることを公式に発表しました。独立したサイズは50%削減されます。FFmpeg 6.1」ヘビサイド」リリース Microsoft、新たな「Windowsアプリ」を発売
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/10143540