SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

TABEL DROP SQLite

Di SQLite, Anda dapat menjatuhkan tabel dengan DROP TABLE pernyataan.

Anda dapat secara opsional menambahkan IF EXISTS klausa untuk menekan kesalahan yang mungkin terjadi jika tabel tidak ada.

Juga, jika tabel direferensikan oleh kunci asing, ada beberapa hal yang harus diperhatikan.

Contoh

Berikut adalah contoh untuk mendemonstrasikan cara paling sederhana untuk menjatuhkan tabel di SQLite:

DROP TABLE t1;

Ini menjatuhkan tabel yang disebut t1 .

Anda dapat secara opsional mengawali nama tabel dengan nama skema.

Menggunakan IF EXISTS Klausa

Anda dapat menggunakan IF EXISTS klausa untuk menekan kesalahan yang mungkin terjadi jika tabel tidak ada.

DROP TABLE IF EXISTS t2;

Jika kami menghapus IF EXISTS klausa, dan jalankan lagi, kita mendapatkan kesalahan.

Contoh:

DROP TABLE t2;

Hasil:

Error: no such table: t2 

Ketergantungan Kunci Asing &Tampilan

SQLite tidak mendukung CASCADE dan RESTRICT kata kunci, yang disertakan dalam standar SQL, dan didukung oleh beberapa RDBMS lain (seperti PostgreSQL). Kata kunci ini dirancang untuk menentukan apa yang harus dilakukan ketika tabel target memiliki dependensi (seperti tampilan atau kunci asing yang mereferensikan tabel).

Mengingat SQLite tidak mendukung kata kunci ini, berikut ini cara SQLite menangani tampilan dan kunci asing saat Anda mencoba menghapus tabel.

SQLite mengabaikan tampilan dependen apa pun. Dengan kata lain, itu terus berlanjut dan menjatuhkan tabel, bahkan jika ada pandangan yang merujuknya.

Adapun kunci asing…

Pertama, kunci asing dinonaktifkan secara default di SQLite. Jadi, kecuali Anda mengaktifkannya, kunci asing apa pun yang mereferensikan tabel target tidak akan berdampak pada penurunan tabel target. Dengan kata lain, tabel akan dijatuhkan.

Jika kunci asing diaktifkan di sesi Anda, maka mereka hanya akan mencegah menjatuhkan tabel jika ada data yang akan melanggar kunci asing itu. Jika tabel anak Anda tidak berisi data, maka tabel induk akan dihapus tanpa kesalahan. Jika tabel anak berisi data (mungkin termasuk data yang mereferensikan kunci utama tabel induk), maka ini akan menghasilkan kesalahan dan tabel tidak akan dihapus.

Seperti ini:

PRAGMA foreign_keys = ON;
DROP TABLE t1;

Hasil:

Error: FOREIGN KEY constraint failed 

Alasan ia bekerja seperti ini adalah karena SQLite melakukan DELETE FROM implicit implisit operasi sebelum menjatuhkan meja. Jika DELETE FROM operasi menghasilkan pelanggaran kunci asing, maka kami mendapatkan kesalahan. Tetapi jika tidak ada data dalam tabel, maka sembarang DELETE FROM operasi tidak akan mengakibatkan pelanggaran kunci asing, dan tabel dapat dijatuhkan.

Singkatnya, ini bukan DROP TABLE operasi yang menyebabkan pelanggaran kunci asing, itu adalah DELETE FROM implicit implisit operasi.

Saat Kunci Asing menggunakan ON DELETE CASCADE

Namun, jika batasan kunci asing didefinisikan dengan ON DELETE CASCADE , maka tabel induk akan dihapus, dan setiap baris yang mereferensikan kolom kunci utama tabel tersebut akan dihapus di tabel turunan.

Ini contohnya.

Buat tabel dan masukkan data:

CREATE TABLE t11 (
    c1 integer  PRIMARY KEY AUTOINCREMENT
    );
CREATE TABLE t12 (
    c1 integer  PRIMARY KEY AUTOINCREMENT, 
    c2 integer REFERENCES t11 (c1) ON DELETE CASCADE
    );
INSERT INTO t11 VALUES (1);
INSERT INTO t12 VALUES (1, 1);

Pilih data:

sqlite> SELECT * FROM t11;
c1
--
1 
sqlite> SELECT * FROM t12;
c1  c2
--  --
1   1 

Lepaskan tabel induk dan tinjau semua tabel:

sqlite> DROP TABLE t11;
sqlite> .tables
t12

Kita dapat melihat bahwa t11 tidak ada lagi, tapi t12 masih ada.

Periksa kunci asing di t12 :

sqlite> PRAGMA foreign_key_list(t12);
id  seq  table  from  to  on_update  on_delete  match
--  ---  -----  ----  --  ---------  ---------  -----
0   0    t11    c2    c1  NO ACTION  CASCADE    NONE 

Ya, itu masih ada, dan kami dapat mengonfirmasi bahwa itu memiliki ON DELETE CASCADE .

Pilih data dari t12 :

sqlite> SELECT * FROM t12;
sqlite> 

Tidak ada baris yang dikembalikan. Ini karena ON DELETE CASCADE opsi pada kunci asing memastikan bahwa baris telah dihapus ketika tabel induk (t11 ) dijatuhkan (atau lebih tepatnya, ketika datanya dihapus melalui DELETE FROM implisit operasi sebelum dijatuhkan).

Menjatuhkan Kunci Asing

SQLite sebenarnya tidak mendukung pelepasan kunci asing. Biasanya dalam SQL Anda menjatuhkan kunci asing dengan ALTER TABLE pernyataan, tetapi ALTER TABLE SQLite implementasi tidak memungkinkan untuk menjatuhkan batasan.

Ada cara untuk menghadapi situasi ini. Lihat Cara Menjatuhkan Kunci Asing di SQLite sebagai contoh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Salin sqlite di aset studio Android tidak berfungsi

  2. Cara terbaik untuk menyimpan json

  3. Bagaimana RandomBlob() Bekerja di SQLite

  4. Ruang Android - Cara menghapus sqlite_sequence untuk semua tabel

  5. SQLite - Ekspor Data ke File CSV