Di SQLite, batasan kunci asing tidak diterapkan kecuali dukungan kunci asing telah diaktifkan.
Mengaktifkan kunci asing melibatkan hal berikut:
- Aktifkan kunci asing saat mengompilasi SQLite.
- 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