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

Cara Mengaktifkan Dukungan Kunci Asing di SQLite

Di SQLite, batasan kunci asing tidak diterapkan kecuali dukungan kunci asing telah diaktifkan.

Mengaktifkan kunci asing melibatkan hal berikut:

  1. Aktifkan kunci asing saat mengompilasi SQLite.
  2. Aktifkan kunci asing saat runtime.

Aktifkan Kunci Asing saat Mengkompilasi SQLite

Saat mengompilasi SQLite, ini bukan masalah mengaktifkan kunci asing – ini lebih merupakan masalah tidak menonaktifkan mereka.

Mengaktifkan kunci asing saat mengkompilasi SQLite berarti Anda tidak menggunakan SQLITE_OMIT_FOREIGN_KEY dan SQLITE_OMIT_TRIGGER saat mengompilasinya.

Jika SQLITE_OMIT_TRIGGER didefinisikan tetapi SQLITE_OMIT_FOREIGN_KEY tidak, maka definisi kunci asing diuraikan dan dapat ditanyakan menggunakan PRAGMA foreign_key_list , tetapi batasan kunci asing tidak diterapkan. PRAGMA foreign_keys perintah adalah no-op dalam konfigurasi ini.

Jika OMIT_FOREIGN_KEY didefinisikan, maka definisi kunci asing bahkan tidak dapat diuraikan (mencoba menentukan definisi kunci asing adalah kesalahan sintaks).

Aktifkan Kunci Asing pada Waktu Proses

Bahkan ketika perpustakaan telah dikompilasi dengan batasan kunci asing diaktifkan, Anda masih perlu mengaktifkan dukungan kunci asing saat runtime.

Anda dapat melakukannya dengan kode berikut:

PRAGMA foreign_keys = ON;

Seperti kebanyakan PRAGMA pernyataan, Anda juga dapat mengganti ON dengan TRUE , YES , atau 1 .

Setelah Anda menjalankannya, kunci asing Anda akan diterapkan.

Perhatikan bahwa pengaturan ini tidak diperlukan untuk membuat kunci asing, tetapi diperlukan untuk menegakkan kunci asing.

Koneksi Lain

Perhatikan bahwa ini hanya mengaktifkan batasan kunci asing untuk koneksi database saat ini.

Jika Anda membuka koneksi baru, Anda harus menjalankan pernyataan itu lagi jika Anda ingin kunci asing diterapkan dalam koneksi tersebut.

Periksa Dukungan Kunci Asing untuk Koneksi Saat Ini

Anda juga dapat memeriksa apakah kunci asing telah diaktifkan untuk koneksi Anda saat ini atau belum dengan menjalankan kode berikut.

PRAGMA foreign_keys;

Hasil:

1

Dalam kasus saya, saya telah mengaktifkan kunci asing untuk koneksi ini sehingga hasilnya adalah 1. Jika kunci asing dinonaktifkan, hasilnya akan menjadi 0.

Berikut ini contoh menonaktifkan, memeriksa nilainya, lalu mengaktifkan dan memeriksa ulang nilainya.

PRAGMA foreign_keys = FALSE;
PRAGMA foreign_keys;
PRAGMA foreign_keys = YES;
PRAGMA foreign_keys;

Hasil:

sqlite> PRAGMA foreign_keys = FALSE;
sqlite> PRAGMA foreign_keys;
foreign_keys
------------
0           
sqlite> PRAGMA foreign_keys = YES;
sqlite> PRAGMA foreign_keys;
foreign_keys
------------
1           

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memilih data antara dua tanggal dari sqlite db dalam format dd-mm-yyyy?

  2. Akses Layanan Aktivitas dan Latar Belakang ke Database SQLite

  3. Tabel isi sebelumnya ActiveAndroid menggunakan migrasi skema

  4. Cara Mengaktifkan Dukungan Kunci Asing di SQLite

  5. GreenDAO mendukung banyak hubungan antar tabel