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

Buat Kunci Asing di SQLite

Saat Anda membuat tabel di SQLite, Anda juga bisa membuat kunci asing untuk membuat hubungan dengan tabel lain.

Artikel ini memberikan contoh pembuatan kunci asing saat membuat tabel di SQLite.

Aktifkan Dukungan Kunci Asing

Hal pertama yang harus kita lakukan adalah mengaktifkan dukungan kunci asing (jika belum dilakukan).

Dengan asumsi perpustakaan SQLite Anda belum telah dikompilasi dengan SQLITE_OMIT_FOREIGN_KEY atau SQLITE_OMIT_TRIGGER ditentukan, Anda masih perlu mengaktifkan dukungan kunci asing saat runtime.

Untuk melakukannya, jalankan pernyataan berikut:

PRAGMA foreign_keys = ON;

Ini akan mengaktifkan penerapan kunci asing untuk koneksi database Anda.

Jika Anda membuka koneksi lain, Anda harus menjalankan pernyataan yang sama untuk koneksi tersebut.

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

Sekarang kita telah mengaktifkan dukungan kunci asing, mari kita lanjutkan dan buat kunci asing.

Contoh

Bayangkan kita menginginkan dua tabel dengan data berikut.

Tabel bernama Hewan Peliharaan :

PetId       PetName     TypeId    
----------  ----------  ----------
1           Brush       3         
2           Tweet       3         
3           Yelp        1         
4           Woofer      1         
5           Fluff       2         

Tabel bernama Jenis s:

TypeId      Type      
----------  ----------
1           Dog       
2           Cat       
3           Parakeet  
4           Hamster   

Dan kami menginginkan TypeId kolom Hewan Peliharaan tabel untuk mereferensikan TypeId kolom Jenis meja.

Dengan kata lain, kami ingin membuat Pets.TypeId kunci anak (dengan batasan kunci asing), dan Types.TypeId kunci induk (dengan batasan kunci utama).

Sementara kunci induk biasanya juga merupakan kunci utama untuk tabel, ini sebenarnya bukan persyaratan. Dalam contoh ini kita akan menjadikannya sebagai kunci utama.

Kita dapat menggunakan kode berikut untuk membuat dua tabel ini.

CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type
);

CREATE TABLE Pets( 
    PetId INTEGER PRIMARY KEY, 
    PetName,
    TypeId,
    FOREIGN KEY(TypeId) REFERENCES Types(TypeId)
);

Bagian yang membuat kunci asing adalah ini:

FOREIGN KEY(TypeId) REFERENCES Types(TypeId)

FOREIGN KEY(TypeId) bagian menyatakan Pets.TypeId sebagai kunci asing.

Meskipun saya tidak memenuhi syarat nama kolom dengan nama tabelnya, kami tahu itu Pets.TypeId (dan bukan Types.TypeId ) karena kami menjalankan ini di CREATE TABLE pernyataan untuk Hewan Peliharaan .

REFERENCES Types(TypeId) menentukan kolom yang akan dirujuk oleh kunci asing kita. Dalam hal ini akan mereferensikan TypeId kolom Jenis tabel.

Sekarang tabel kita telah dibuat dengan kunci asing yang sesuai, kita dapat menambahkan data.

INSERT INTO Types VALUES 
    ( NULL, 'Dog' ),
    ( NULL, 'Cat' ),
    ( NULL, 'Parakeet' ),
    ( NULL, 'Hamster' );

INSERT INTO Pets VALUES 
    ( NULL, 'Brush', 3 ),
    ( NULL, 'Tweet', 3 ),
    ( NULL, 'Yelp', 1 ),
    ( NULL, 'Woofer', 1 ),
    ( NULL, 'Fluff', 2 );

Tabel sekarang berisi data yang ditunjukkan di atas.

sqlite> SELECT * FROM Pets;
PetId       PetName     TypeId    
----------  ----------  ----------
1           Brush       3         
2           Tweet       3         
3           Yelp        1         
4           Woofer      1         
5           Fluff       2         
sqlite> SELECT * FROM Types;
TypeId      Type      
----------  ----------
1           Dog       
2           Cat       
3           Parakeet  
4           Hamster   

Pelanggaran Kunci Asing

Tapi sekarang mari kita coba memasukkan data yang melanggar kunci asing.

Mari coba tambahkan hewan peliharaan yang menggunakan TypeID yang tidak ada (yaitu TypeId nilai yang tidak ada di Jenis kolom).

INSERT INTO Pets VALUES 
    ( NULL, 'Homer', 5 );

Hasil:

Error: FOREIGN KEY constraint failed

Jadi kunci asing kami berhasil mencegah data buruk masuk ke database. Oleh karena itu, ini membantu kami menjaga integritas data.

Jika Anda tidak mendapatkan kesalahan ini, dan data berhasil dimasukkan, Anda belum mengaktifkan dukungan kunci asing. Seperti yang disebutkan, Anda harus mengaktifkan dukungan kunci asing sebelum kunci asing Anda diterapkan.

Menambahkan Kunci Asing ke Tabel yang Ada

ALTER TABLE pernyataan di SQLite sangat terbatas, dan tidak memungkinkan untuk menambahkan kunci asing ke tabel yang ada.

Oleh karena itu, jika Anda perlu menambahkan kunci asing ke tabel yang ada, Anda harus menghapus tabel dan membuatnya lagi dengan batasan kunci asing.

Jika tabel berisi data yang ingin Anda simpan, Anda dapat mentransfer data tersebut ke tabel lain, sebelum mentransfernya kembali setelah Anda membuat tabel baru dengan batasan kunci asing.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite CROSS JOIN dengan Contoh Praktis

  2. Memperbarui database yang sudah terisi sebelumnya

  3. SQLite JSON_EACH()

  4. Cara membuat Aplikasi Internasionalisasi Offline:Gunakan database Sqlite

  5. Bagaimana Memformat Hasil SQLite sebagai Tabel