sql >> データベース >  >> RDS >> Database

初心者向けSQLDROPTABLE

    SQLでは、データベースからテーブルを削除する場合は、 DROP TABLEを使用する必要があります。 ステートメント。

    これにより、テーブルとそのすべてのデータが破壊されます。

    構文

    SQL標準構文は次のようになります:

    DROP TABLE <table name> <drop behavior>

    場所:

    • <テーブル名> ドロップするテーブルの名前です。
    • <ドロップ動作> オプションを指定します。これらはCASCADEのいずれかです。 またはRESTRICT

    一部のRDBMSは、オプションの IF EXISTSも受け入れます。 テーブルが存在しない場合でもエラーを返さないことを意味する引数。

    一部のRDBMS(MySQLやMariaDBなど)もオプションの TEMPORARYを受け入れます 一時テーブルのみが削除されるようにするキーワード。

    OracleはPURGEも受け入れます ごみ箱からそれを削除する句。

    実例を示します。

    DROP TABLE t1;

    そのコードを実行すると、 t1というテーブルが削除されます とそのすべてのデータ。

    IF EXISTS 条項

    IF EXISTSの使用例を次に示します。 テーブルがすでに存在するかどうかを確認する句。

    DROP TABLE IF EXISTS t1;

    IF EXISTSの使用 テーブルが存在しない場合でもエラーが発生しないようにします。

    IF EXISTSを削除するとどうなりますか ステートメントから:

    DROP TABLE t1;

    結果:

    Msg 3701, Level 11, State 5, Line 1
    Cannot drop the table 't1', because it does not exist or you do not have permission.

    これは、SQLServerによって返されるメッセージです。メッセージは、使用しているDBMSによって異なります。

    依存する外部キーとビュー

    一部のRDBMSでは、オプションの RESTRICTが許可されています またはCASCADE テーブルにそれを参照する外部キーまたはビューがある場合に何が起こるかを指定するキーワード。

    RESTRICT オプション

    RESTRICTの使用例を次に示します。 外部キーによって参照されているテーブルを別のテーブルにドロップしようとした場合:

    DROP TABLE t1 RESTRICT;

    結果:

    cannot drop table t1 because other objects depend on it

    この例はPostgreSQLを使用して行われました。 RESTRICT はデフォルトのオプションであるため、 RESTRICT を含めなくても、同じ結果が得られます。 キーワード。

    CASCADE オプション

    CASCADEに切り替えるとどうなりますか 同じテーブル(別のテーブルの外部キーによって参照されている)を削除しようとした場合:

    DROP TABLE t1 CASCADE;

    結果:

    NOTICE:  drop cascades to constraint t2_c2_fkey on table t2
    Commands completed successfully

    これにより、 t1を参照していた外部キーが削除されました テーブル。外部キーはt2_c2_fkeyと呼ばれていました 。

    外部キーを持つテーブルは削除されなかったことに注意してください。外部キーをドロップしただけです。

    ターゲットテーブルの場合( t1 )任意のビューによって参照されていた場合、ビュー全体が削除されます。

    CASCADEを指定する必要はありません ターゲットテーブルに存在するインデックス、ルール、トリガー、または制約を削除します。デフォルトのオプション( RESTRICT を使用している場合でも、これらは自動的に削除されます 。

    MySQLとMariaDB

    一部のDBMS(MySQLやMariaDBなど)は RESTRICTを受け入れます およびCASCADE キーワードですが、何もしません。これらは、DBMS間の移植を容易にするために提供されています。

    Oracle

    Oracleの構文は少し異なります。CASCADECONSTRAINTS 、これは、削除されたテーブルの主キーと一意キーを参照するすべての参照整合性制約を削除します。

    SQL Server

    SQLServerはCASCADEをサポートしていません またはRESTRICT キーワード。テーブルに外部キーの依存関係がある場合は、テーブルを削除する前にそれらを削除する必要があります。そうしないと、エラーが発生します。

    ただし、SQL Serverでは、ビューまたはストアドプロシージャによって参照されている場合でも、テーブルを削除できます。したがって、そのような参照を確認し、 DROP VIEWを使用して明示的に削除する必要があります。 またはDROPPROCEDURE

    SQLite

    SQLiteはCASCADEをサポートしていません またはRESTRICT キーワード。

    ターゲットテーブルがいずれかのビューによって参照されている場合、テーブルは引き続き削除されます(ビューは残ります)。

    ターゲットテーブルが外部キーによって参照されている場合、結果は、外部キーが有効になっているかどうか、有効になっている場合は子テーブルにデータがあるかどうか、有効になっている場合は外部キーが<で定義されているかどうかによって異なります。 code> ON DELETE CASCADE

    SQLiteを使用する場合は、SQLite DROP TABLEを参照してください。 外部キーによって参照されるテーブルを削除する例と説明については、

    複数のテーブルを削除する

    一部のRDBMSでは、単一の DROP TABLEから複数のテーブルを削除できます。 ステートメント。

    例:

    DROP TABLE t11, t12;

    この構文をサポートするRDBMSには、SQL Server、MySQL、MariaDB、およびPostgreSQLが含まれます。

    ただし、外部キーによって参照されているテーブルを削除し、その外部キーによってそのテーブルが削除されない場合は、親テーブルの前に子テーブルをリストする必要があります。

    たとえば、SQL Serverで上記のステートメントを実行すると、次のエラーが発生します。

    Msg 3726, Level 16, State 1, Line 1
    Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.

    この場合、 DROP TABLEのテーブルの順序を簡単に切り替えることができます。 ステートメント:

    DROP TABLE t12, t11;

    実際、この場合、 t12という別のエラーが発生しました。 存在しません。

    これが私が得たものです:

    Msg 3701, Level 11, State 5, Line 1
    Cannot drop the table 't12', because it does not exist or you do not have permission.

    これは、前のステートメントで t11を削除できなかったためです。 、実際には t12の削除に成功しました 。

    そして、エラーのコメディのように、今回は t11をドロップすることができました ただし、 t12ではありません 。

    とにかく、両方のテーブルが削除されました。

    ただし、最初に正しい注文を受け取った場合は、次のようなメッセージが表示されます。

    Commands completed successfully.

    TEMPORARYキーワード

    一部のRDBMS(MySQLやMariaDBなど)は TEMPORARYを受け入れます キーワード。

    DROPの間を行き来します およびTABLE 、このように:

    DROP TEMPORARY TABLE t1;

    TEMPORARYの使用 キーワードを使用すると、一時テーブルを削除しようとしたときに、一時テーブル以外のテーブルを誤って削除しないようにできます。

    TEMPORARY キーワードには次の効果があります:

    • ステートメントはTEMPORARYのみを削除します テーブル。
    • ステートメントは暗黙的なコミットを引き起こしません( DROP TABLE を使用) TEMPORARYなし キーワードは、現在アクティブなトランザクションを自動的にコミットします。
    • アクセス権はチェックされません。 TEMPORARY テーブルはそれを作成したセッションでのみ表示されるため、チェックは必要ありません。

    パージ条項

    OracleにはオプションのPURGEがあります これは、テーブルを削除して、それに関連付けられているスペースを1つのステップで解放する場合に使用できます。 PURGEを指定した場合 の場合、データベースはテーブルとその依存オブジェクトをごみ箱に入れません。

    これは、最初にテーブルを削除してからごみ箱から削除するのと同じですが、プロセスの1つのステップを節約できます。

    PURGEを指定する場合は注意してください 、テーブルを復元することはできません。

    PURGEを指定しない場合 、 DROP TABLE ステートメントによって、他のオブジェクトが使用するためにスペースが表領域に解放されることはなく、スペースは引き続きユーザーのスペース割り当てにカウントされます。


    1. SQLServerで実行されているクエリを一覧表示します

    2. SQLServer2008およびSQLServer2008R2を実行しているユーザーへの注意

    3. PostgreSQLデータベースをSQLServerデータベースに移行する方法は?

    4. varcharとして保存された日付の比較