Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL DROP TABLE untuk Pemula

Dalam SQL, jika Anda ingin menghapus tabel dari database, Anda perlu menggunakan DROP TABLE pernyataan.

Itu menghancurkan tabel dan semua datanya.

Sintaks

Sintaks standar SQL seperti ini:

DROP TABLE <table name> <drop behavior>

Dimana:

  • <table name> adalah nama tabel yang ingin Anda jatuhkan.
  • <drop behavior> menentukan opsi apa pun. Ini bisa berupa CASCADE atau RESTRICT .

Beberapa RDBMS juga menerima IF EXISTS opsional argumen yang berarti tidak akan mengembalikan kesalahan jika tabel tidak ada.

Beberapa RDBMS (seperti MySQL dan MariaDB) juga menerima TEMPORARY opsional kata kunci untuk memastikan hanya tabel sementara yang dihapus.

Oracle juga menerima PURGE klausa, yang membersihkannya dari recycle bin.

Contoh

Berikut ini contoh untuk didemonstrasikan.

DROP TABLE t1;

Menjalankan kode itu menjatuhkan tabel yang disebut t1 dan semua datanya.

IF EXISTS Klausa

Berikut ini contoh penggunaan IF EXISTS klausa untuk memeriksa apakah tabel sudah ada.

DROP TABLE IF EXISTS t1;

Menggunakan IF EXISTS memastikan bahwa kami tidak mendapatkan kesalahan jika tabel tidak ada.

Inilah yang terjadi jika kita menghapus IF EXISTS dari pernyataan:

DROP TABLE t1;

Hasil:

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

Itulah pesan yang dikembalikan oleh SQL Server. Pesan Anda akan bergantung pada DBMS yang Anda gunakan.

Kunci &Tampilan Asing Bergantung

Beberapa RDBMS mengizinkan RESTRICT opsional atau CASCADE kata kunci yang menentukan apa yang terjadi jika tabel memiliki kunci asing atau tampilan yang merujuknya.

RESTRICT Opsi

Berikut ini contoh penggunaan RESTRICT ketika mencoba untuk menjatuhkan tabel yang direferensikan oleh kunci asing di tabel lain:

DROP TABLE t1 RESTRICT;

Hasil:

cannot drop table t1 because other objects depend on it

Contoh ini dilakukan dengan menggunakan PostgreSQL. RESTRICT adalah opsi default, jadi kami akan menerima hasil yang sama meskipun kami tidak menyertakan RESTRICT kata kunci.

CASCADE Opsi

Inilah yang terjadi jika kita beralih ke CASCADE ketika mencoba menjatuhkan tabel yang sama (yang dirujuk oleh kunci asing di tabel lain):

DROP TABLE t1 CASCADE;

Hasil:

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

Ini menjatuhkan kunci asing yang mereferensikan t1 kami meja. Kunci asing disebut t2_c2_fkey .

Perhatikan bahwa itu tidak menjatuhkan tabel yang memiliki kunci asing. Itu hanya menjatuhkan kunci asing.

Jika tabel target (t1 ) direferensikan oleh tampilan apa pun, seluruh tampilan akan dihapus.

Anda tidak perlu menentukan CASCADE untuk menjatuhkan indeks, aturan, pemicu, atau batasan apa pun yang ada untuk tabel target. Ini dihapus secara otomatis, bahkan saat menggunakan opsi default (RESTRICT ).

MySQL dan MariaDB

Beberapa DBMS (seperti MySQL dan MariaDB) menerima RESTRICT dan CASCADE kata kunci, tetapi mereka tidak melakukan apa-apa. Mereka disediakan hanya untuk memudahkan portabilitas antar DBMS.

Oracle

Oracle memiliki sintaks yang sedikit berbeda, CASCADE CONSTRAINTS , yang menghapus semua batasan integritas referensial yang merujuk ke kunci utama dan unik di tabel yang dijatuhkan.

SQL Server

SQL Server tidak mendukung CASCADE atau RESTRICT kata kunci. Jika tabel memiliki dependensi kunci asing, Anda harus menghapusnya sebelum menjatuhkan tabel, jika tidak, Anda akan mendapatkan kesalahan.

Namun, di SQL Server, Anda dapat menjatuhkan tabel meskipun direferensikan oleh tampilan atau prosedur tersimpan. Oleh karena itu, Anda harus memeriksa referensi semacam itu, dan secara eksplisit menghapusnya dengan menggunakan DROP VIEW atau DROP PROCEDURE .

SQLite

SQLite tidak mendukung CASCADE atau RESTRICT kata kunci.

Jika tabel target direferensikan oleh tampilan apa pun, tabel akan tetap dihapus (dan tampilan akan tetap ada).

Jika tabel target direferensikan oleh kunci asing apa pun, hasilnya akan bergantung pada apakah Anda mengaktifkan kunci asing, dan jika demikian, apakah ada data di tabel anak, dan jika demikian, apakah kunci asing didefinisikan dengan ON DELETE CASCADE .

Jika Anda menggunakan SQLite, lihat SQLite DROP TABLE untuk contoh dan diskusi menjatuhkan tabel yang direferensikan oleh kunci asing.

Lepaskan Beberapa Tabel

Beberapa RDBMS memungkinkan Anda untuk menghapus beberapa tabel dari satu DROP TABLE pernyataan.

Contoh:

DROP TABLE t11, t12;

RDBMS yang mendukung sintaks ini termasuk SQL Server, MySQL, MariaDB, dan PostgreSQL.

Namun, jika Anda menjatuhkan tabel yang direferensikan oleh kunci asing, dan kunci asing tersebut mencegahnya agar tidak dijatuhkan, Anda harus mencantumkan tabel anak sebelum tabel induk.

Misalnya, jika saya menjalankan pernyataan di atas di SQL Server, saya mendapatkan kesalahan berikut:

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

Dalam hal ini, saya cukup mengganti urutan tabel di DROP TABLE pernyataan:

DROP TABLE t12, t11;

Sebenarnya, dalam kasus ini, saya mendapatkan kesalahan lain yang memberi tahu saya bahwa t12 tidak ada.

Inilah yang saya dapatkan:

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

Ini karena, meskipun pernyataan sebelumnya tidak dapat menjatuhkan t11 , ternyata berhasil menjatuhkan t12 .

Dan seperti komedi kesalahan, kali ini mampu menjatuhkan t11 tapi bukan t12 .

Terlepas dari itu, kedua tabel sekarang telah dihapus.

Tetapi jika Anda mendapatkan pesanan yang benar pertama kali, Anda akan menerima pesan seperti ini:

Commands completed successfully.

Kata Kunci SEMENTARA

Beberapa RDBMS (seperti MySQL dan MariaDB) menerima TEMPORARY kata kunci.

Itu berada di antara DROP dan TABLE , seperti ini:

DROP TEMPORARY TABLE t1;

Menggunakan TEMPORARY kata kunci akan memastikan bahwa Anda tidak secara tidak sengaja menjatuhkan tabel non-sementara saat mencoba menjatuhkan tabel sementara.

TEMPORARY kata kunci memiliki efek berikut:

  • Pernyataan hanya turun TEMPORARY tabel.
  • Pernyataan tidak menyebabkan komit implisit (menggunakan DROP TABLE tanpa TEMPORARY kata kunci secara otomatis melakukan transaksi aktif saat ini).
  • Tidak ada hak akses yang diperiksa. Sebuah TEMPORARY tabel hanya terlihat dengan sesi yang membuatnya, jadi tidak diperlukan pemeriksaan.

Klausul Pembersihan

Oracle memiliki opsi PURGE klausa, yang dapat Anda gunakan jika Anda ingin menghapus tabel dan melepaskan ruang yang terkait dengannya dalam satu langkah. Jika Anda menentukan PURGE , maka database tidak menempatkan tabel dan objek dependennya ke dalam recycle bin.

Ini sama dengan menjatuhkan tabel terlebih dahulu lalu membersihkannya dari recycle bin, tetapi ini memungkinkan Anda menghemat satu langkah dalam prosesnya.

Perhatikan bahwa jika Anda menentukan PURGE , Anda tidak akan dapat memulihkan tabel.

Jika Anda tidak menentukan PURGE , DROP TABLE pernyataan tidak menghasilkan ruang yang dilepaskan kembali ke tablespace untuk digunakan oleh objek lain, dan ruang terus dihitung terhadap kuota ruang pengguna.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 911/112:Model Data Layanan Panggilan Darurat

  2. Model Data Bengkel Mobil

  3. Menggunakan ODBC dengan Salesforce dan OneLogin Single Sign On (SSO)

  4. Menggunakan Salesforce SOQL dari Linux

  5. Apakah Sertifikat Profesional Google Data Analytics Layak?