ふりかえり

この記事では、テーブルを削除する方法を解説します。
テーブルの作成方法については、以下の記事を参照してください。

今回削除するテーブルは、以前作成したテーブルと同じよ!!
<テーブル作成のSQL>
-- 申請管理情報テーブルの作成
create table 申請管理情報 (
STAFF_NO varchar2(10) not null, -- 職員番号 (Staff Number)
APPLI_NO varchar2(10) not null, -- 申請番号 (Application Number)
APPLI_DATE date, -- 申請年月日 (Application Date)
APPROVAL_DATE date, -- 承認日 (Approval Date)
SEND_BACK_DATE date, -- 差戻年月日 (Send Back Date)
APPLICATION_CONTENT varchar2(50), -- 申請内容 (Application Content)
constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)
);
<create table文の実行結果>


ちなみに、SQLの実行方法を知りたいという方は、
ぜひ!!下記の記事を参考にしてください。

環境構築が不要で、ブラウザで無料で使用できるから、
SQLの練習にはもってこいだよ!
今回のSQLも、Oracle Live SQLで実行していくよ!

テーブルにデータを挿入するINSERT文の解説は
下記の記事をご覧ください!

ぜひ、ご覧くださいませ!
<テーブル挿入のSQL>
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, APPROVAL_DATE, SEND_BACK_DATE, APPLICATION_CONTENT)
values ('1001', 'A001', to_date('2024-02-01', 'YYYY-MM-DD'), to_date('2024-02-05', 'YYYY-MM-DD'), NULL, 'ガソリン代支給');
<insert into 文の実行結果>

drop table文を使ってテーブルを削除しよう

まずは、基本構文から見ていきましょう!
DROP TABLE テーブル名;

すごいシンプルだね!

はい、かなりシンプルです。
なので、申請管理情報テーブルを削除したいときは、
drop table 申請管理情報;

でいけます!
<実行結果>


これなら、簡単ね!

ただ、DROP TABLE 使用の際は特に注意しなければいけません!!
そのケースを見ていきましょう。
drop table使用時の注意点

注意点とは!?

ズバリ、依存関係に注意が必要です。
もし、実務で使用する際は、子テーブルの存在を確認して、
子テーブルから削除しましょう!

??

詳しく解説していきます!
まずは、2つのテーブルを作成するSQLを実行してみましょう。
-- 申請管理情報テーブルの作成
create table 申請管理情報 (
STAFF_NO varchar2(10) not null, -- 職員番号 (Staff Number)
APPLI_NO varchar2(10) not null, -- 申請番号 (Application Number)
APPLI_DATE date, -- 申請年月日 (Application Date)
APPROVAL_DATE date, -- 承認日 (Approval Date)
SEND_BACK_DATE date, -- 差戻年月日 (Send Back Date)
APPLICATION_CONTENT varchar2(50), -- 申請内容 (Application Content)
constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)
);
create table 申請内容の詳細 (
職員番号 varchar2(10) not null, -- 親テーブルの STAFF_NO に対応
申請番号 varchar2(10) not null, -- 親テーブルの APPLI_NO に対応
申請内容の詳細 varchar2(100), -- 申請の詳細内容を格納するカラム(適宜サイズを調整してください)
constraint PK_申請内容の詳細 primary key (職員番号, 申請番号),
constraint FK_申請内容の詳細 foreign key (職員番号, 申請番号)
references 申請管理情報 (STAFF_NO, APPLI_NO)
);
<実行結果>


作成したテーブルにデータを入れましょう。
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE)
values ('1001', 'A001', TO_DATE('2024-02-25', 'YYYY-MM-DD'));
insert into 申請内容の詳細 (職員番号, 申請番号, 申請内容の詳細)
values ('1001', 'A001', 'レギュラーとハイオク間違えたので、もう一回入れに行きたいです。');

データ挿入が完了したら、DROP TABLEでテーブルを削除してみましょう。
DROP TABLE 申請管理情報;


あれっ?エラーが出たね。

ORA-02449: 親キーに参照されているため、ドロップできません
というエラーが出ましたね。
これは、親テーブルを削除しようとすると、参照している子テーブルがあるためエラーが発生します。
外部キー (Foreign Key):
- 子テーブルが親テーブルの特定のカラムを参照する制約です。これにより、子テーブルに存在する値が必ず親テーブルに存在することを保証します。
- 例:
申請内容の詳細のSTAFF_NOとAPPLI_NOは、必ず申請管理情報に存在する必要があります。テーブル申請内容の詳細に外部キー (FK_申請内容の詳細) が設定されており、申請管理情報のSTAFF_NOとAPPLI_NOを参照しています。
主キー (Primary Key):
- テーブル内の各行を一意に識別するためのカラムです。重複やNULL値を許しません。
- 例:
申請管理情報のSTAFF_NOとAPPLI_NOの組み合わせが主キーです。
親テーブル (Parent Table):
- 外部キーで参照される元のテーブルです。今回の場合、
申請管理情報が親テーブルです。
子テーブル (Child Table):
- 外部キーを持ち、親テーブルを参照するテーブルです。今回の場合、
申請内容の詳細が子テーブルです。

子テーブルと親テーブルが外部キーで繋がっていたら、
親テーブルから削除できないんだね

はい、そうです!
外部キー制約 (Foreign Key Constraint) が、データの整合性を守るため に存在します。
外部キー制約は、子テーブルのデータが親テーブルに依存している場合、親テーブルの該当行を削除できない ようにします。これにより、子テーブルに「存在しない親」を参照するデータが残ってしまう状況を防ぎます。

なるほどー、
じゃあテーブルを削除したいときは、子テーブルから削除するのが
いいってこと?

はい!
削除するときは、子テーブルから削除することをオススメします!
一応、親テーブルから削除する方法もあるのですが、そちらに関しては
また別の機会に解説します。
削除するための方法
子テーブルを先に削除する (推奨)
親テーブルを削除する前に、子テーブルを先に削除します。
DROP TABLE 申請内容の詳細;
DROP TABLE 申請管理情報;
子テーブルを先に削除することで、親テーブルが参照されることがなくなり、エラーが発生しません。
データの整合性を保つため、通常はこの方法を推奨します。
まとめ

テーブル削除について解説しました。
ただし、実務で使用する場合は、バックアップを取りましょう!
万が一、消してはいけなかったというケースが後から出てくると、一大事に
なるので、気を付けましょう!






コメント