Birincil Anahtar ve Yabancı Anahtar SQLite Örneklerle

SQLite Kısıtlamalar

Sütun kısıtlamaları, eklenen verileri doğrulamak için bir sütuna eklenen değerlere kısıtlamalar ve kurallar uygular. Sütun kısıtlamaları, tablo oluştururken sütun tanımında tanımlanır.

SQLite Birincil anahtar

Birincil anahtar sütunundaki tüm değerler benzersiz olmalı ve boş olmamalıdır

Birincil anahtar yalnızca bir sütuna veya bir sütun kombinasyonuna uygulanabilir; ikinci durumda, sütun değerlerinin birleşimi tüm tablo satırları için benzersiz olmalıdır.

Sözdizimi:

Bir tabloda birincil anahtarı tanımlamanın birçok farklı yolu vardır:

  • Sütun tanımının kendisinde:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • Ayrı bir tanım olarak:
    PRIMARY KEY(ColumnName);
  • Birincil anahtar olarak sütunların bir birleşimini oluşturmak için:
    PRIMARY KEY(ColumnName1, ColumnName2);

Boş kısıtlama değil

SQLite Boş değil kısıtlaması, bir sütunun boş değere sahip olmasını engeller:

ColumnName INTEGER  NOT NULL;

VARSAYILAN Kısıtlama

SQLite Varsayılan kısıtlama Bir sütuna herhangi bir değer girmezseniz bunun yerine varsayılan değer eklenir.

Örneğin:

ColumnName INTEGER DEFAULT 0;

Bir insert ifadesi yazarsanız ve o sütun için herhangi bir değer belirtmediyseniz sütunun değeri 0 olacaktır.

SQLite BENZERSİZ kısıtlama

SQLite Benzersiz kısıtlama, sütunun tüm değerleri arasında yinelenen değerleri önleyecektir.

Örneğin:

EmployeeId INTEGER NOT NULL UNIQUE;

Bu, "Çalışan kimliği" değer benzersiz olacak, kopyalanan değerlere izin verilmeyecektir. Bunun sütunun değerleri için geçerli olduğunu unutmayın. "Çalışan kimliği" bir tek.

SQLite KONTROL kısıtlaması

SQLite kontrol kısıtlaması, eklenen bir değeri kontrol etmek için bir koşuldur; değer koşulla eşleşmiyorsa eklenmez.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

10'dan küçük bir değer giremezsiniz. “Miktar” sütun.

SQLite Yabancı anahtar

The SQLite yabancı anahtar, bir tabloda bulunan değerin varlığını, yabancı anahtarın tanımlandığı ilk tabloyla ilişkisi olan başka bir tabloya doğrulayan bir kısıtlamadır.

Birden fazla tabloyla çalışırken, bir sütunu ortak olan birbiriyle ilişkili iki tablo olduğunda. Ve eğer birine girilen değerin diğer tablonun sütununda da bulunmasını istiyorsanız o zaman sütunun ortak kısmında “Yabancı Anahtar Kısıtlaması” kullanmalısınız.

Bu durumda, o sütuna bir değer girmeye çalıştığınızda yabancı anahtar, eklenen değerin tablonun sütununda bulunmasını sağlayacaktır.

Yabancı anahtar kısıtlamalarının varsayılan olarak etkin olmadığını unutmayın. SQLite, öncelikle aşağıdaki komutu çalıştırarak bunları etkinleştirmeniz gerekir:

PRAGMA foreign_keys = ON;

Yabancı anahtar kısıtlamaları getirildi SQLite 3.6.19 sürümünden başlayarak.

Örnek SQLite Yabancı anahtar

Diyelim ki iki tablomuz var; Öğrenciler ve Bölümler.

Öğrenciler tablosunda öğrencilerin bir listesi bulunur ve bölümler tablosunda bölümlerin bir listesi bulunur. Her öğrenci bir bölüme aittir; yani her öğrencinin bir departmanId sütunu vardır.

Şimdi, yabancı anahtar kısıtlamasının, öğrenciler tablosundaki bölüm kimliği değerinin bölümler tablosunda bulunmasını sağlamak için nasıl yardımcı olabileceğini göreceğiz.

SQLite Yabancı anahtar

Dolayısıyla, Öğrenciler tablosundaki Departman Kimliği üzerinde bir yabancı anahtar kısıtlaması oluşturursak, eklenen her departman Kimliğinin Departmanlar tablosunda sunulması gerekir.

CREATE TABLE [Departments] (
	[DepartmentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
	[DepartmentName] NVARCHAR(50)  NULL
);
CREATE TABLE [Students] (
	[StudentId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
	[StudentName] NVARCHAR(50)  NULL,
	[DepartmentId] INTEGER  NOT NULL,
	[DateOfBirth] DATE  NULL,
	FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId)
);

Yabancı anahtar kısıtlamalarının, başka bir tabloyla ilişkisi olan bir tabloya tanımsız bir öğe veya değer eklenmesini nasıl engelleyebileceğini kontrol etmek için aşağıdaki örneğe bakacağız.

Bu örnekte, Departmanlar tablosunun Öğrenciler tablosu için bir Yabancı anahtar kısıtlaması vardır; bu nedenle, öğrenciler tablosuna eklenen herhangi bir departmanId değerinin departmanlar tablosunda mevcut olması gerekir. Departmanlar tablosunda bulunmayan bir departmanId değeri eklemeye çalışırsanız yabancı anahtar kısıtlaması bunu yapmanızı engelleyecektir.

İki departman ekleyelim "O" ve “Sanat” Departmanlar tablosuna aşağıdaki gibi girin:

INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');

İki ifade, departmanlar tablosuna iki departman eklemelidir, sorguyu çalıştırarak iki değerin eklendiğinden emin olabilirsiniz. “Bölümlerden * SEÇİN” Daha sonra:

SQLite Yabancı anahtar

Daha sonra departman tablosunda bulunmayan bir departman kimliğine sahip yeni bir öğrenci eklemeyi deneyin:

INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);

Satır eklenmeyecek ve şunu söyleyen bir hata alacaksınız: FOREIGN KEY kısıtlaması başarısız oldu.