Bu sayfa makine çevirisidir. İngilizce orijinalini okuyun. English

IBSurgeon kütüphanesi

Firebird ve InterBase'te veritabanı kısıtlamaları

NOTICE: Bu belge, Alexey Kovyazin ve Serg Vostrikov tarafından yazılan “The InterBase World” kitabından bir bölümdür.

Bu bölüm, InterBase ve Firebird veritabanlarındaki kısıtlamalara ayrılmıştır. Veritabanı kısıtlamaları, tablolar arasındaki ilişkileri tanımlayan ve veritabanındaki verileri kontrol edip değiştirebilen kurallardır. Bu kurallar, özel veritabanı nesneleri olarak gerçekleştirilir. Kısıtlamaları kullanmanın ana avantajı, veri kontrolünü ve uygulamanın iş mantığının bir kısmını veritabanı düzeyinde uygulama yeteneğidir, yani bunları merkezileştirmek ve basitleştirmek, böylece veritabanı uygulamalarının geliştirilmesini daha kolay ve daha güvenilir hale getirmektir.

Yeni başlayan geliştiriciler genellikle veritabanı kısıtlamalarını kullanmayı ihmal ederler ve bunların yaratıcı çalışmayı engellediğini düşünürler. Ancak, aslında böyle bir görüş, veritabanı tasarımı teorisi ve pratiği hakkında yetersiz bilgiyle oluşur.

Aynı zamanda, en deneyimli tasarımcılar, bazı kısıtlama türlerini kullanmaktan vazgeçmeyi göze alırlar; bu sayede uygulamaları hız kazanır. Uzman tasarımcıların deneyimi, sunucunun çalışmasını çok iyi anlamalarını ve karmaşık durumlarda davranışını doğru bir şekilde tahmin etmelerini sağlar, bu nedenle InterBase’e yeni başlayan programcıların deneyimli meslektaşlarının benzer eylemlerine başvurmamaları daha iyidir.

Bu kitap kapsamında veritabanı tasarımını ele almıyoruz; bu konu hakkında daha fazla bilgi için kitabın sonundaki literatür listesine bakınız. Burada yalnızca InterBase veritabanındaki tüm kısıtlama türlerini inceleyeceğiz ve uygulama örneklerini ele alacağız.

Veritabanındaki kısıtlama türleri

InterBase veritabanında aşağıdaki kısıtlama türleri vardır:

  • PRIMARY KEY;
  • UNIQUE KEY;
  • FOREIGN KEY

- otomatik tetikleyicileri açabilir - ON UPDATE ve ON DELETE;

  • CHECK

Önceki bölümlerde, bu kısıtlamalardan bazılarından bahsettik, çünkü materyalin mantıksal sunumu için gerekliydi, ancak şimdi bunların sözdizimini, uygulamasını ve gerçekleştirilmesini daha ayrıntılı olarak ele alacağız. Veritabanı kısıtlamaları iki türdendir - tek bir alana dayalı ve tablonun birkaç alanına dayalı. Her iki kısıtlama türünün sözdizimi aşağıda verilmiştir.

= [CONSTRAINT constraint]

[ …]

= {UNIQUE | PRIMARY KEY

| CHECK ( )

| REFERENCES other_table [( other_col [, other_col …])]

[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

}

Birkaç alana dayalı kısıtlamaların sözdizimi aşağıdaki gibidir:

= [CONSTRAINT constraint]

[< tconstraint> …]

= {{PRIMARY KEY | UNIQUE} ( col [, col …])

| FOREIGN KEY ( col [, col …]) REFERENCES other_table[( other_col [, other_col …])]

[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

| CHECK ( )}

Tek bir alana ve birkaç alana dayalı kısıtlamalar arasındaki sözdizimi farkı açıktır - sonuncusunda, kısıtlamaya dahil edilen birkaç alan belirtebiliriz. Tek bir alana dayalı kısıtlama durumunda, açıklanan tüm seçenekler yalnızca mevcut alanla ilgilidir. Elbette, bu iki kısıtlama türünün uygulanma şekli farklıdır: tek bir alana dayalı kısıtlamalar, gerekli alanın tanımına basitçe eklenir ve birkaç alana dayalı kısıtlamalar, tablonun genel tanımında virgülden sonra belirtilir. Ayrıntılı örnekler bu bölümün aşağıdaki kısımlarında verilmiştir.

Tipik kısıtlama örneği

Aslında, tek bir alana dayalı kısıtlamalar, birkaç alana dayalı kısıtlamaların özel bir durumudur.

Bu iki farklı yaklaşımı kullanarak birincil anahtar kısıtlaması oluşturma örneği aşağıda verilmiştir. Yalnızca bir alan içeren bir tablo oluşturalım ve ona birincil anahtar kısıtlaması kuralım.

Tek bir alana dayalı kısıtlama sözdizimini kullanan birincil anahtar örneği:

CREATE TABLE test1( ID_PK INTEGER CONSTRAINT pktest NOT NULL PRIMARY KEY); Bu örnekte, ID_PK alanı için pktest adında birincil anahtar oluşturulur. Sonuç olarak, tek satırda oldukça kompakt bir açıklama elde ederiz. Aynı amaç için birkaç alana dayalı kısıtlama sözdizimini kullanabiliriz: CREATE TABLE test2( ID_PK INTEGER NOT NULL, CONSTRAINT pktst PRIMARY KEY (ID_PK));

Kısıtlamaların oluşturulması

Kısıtlamaların oluşturulmasını daha ayrıntılı olarak ele alalım. Ortak kısıtlama sözdiziminin açıklamasında ilk olarak [CONSTRAINT constraint] seçeneği gelir. Gördüğünüz gibi, bu seçenek köşeli parantez içinde yer alır, yani isteğe bağlıdır.

Bu seçeneği kullanarak, tek bir alana dayalı kısıtlama sözdiziminin uygulanmasında olduğu gibi, birkaç alana dayalı kısıtlamalarda da oluşturulan kısıtlamaya bir ad belirleyebilirsiniz. Kısıtlama için bir ad belirtmediyseniz, InterBase otomatik olarak bir ad üretecektir. Yine de, veritabanı şemasının okunabilirliğini artırmak ve kısıtlamaların daha sonra yönetimini basitleştirmek için oluşturulan kısıtlamaya bir ad belirlemek daha iyidir.

Kısıtlamaya bir ad belirledikten sonra, türü tanımlanmalıdır. Ortak kısıtlama sözdiziminin açıklamasında belirtildikleri sırayla farklı kısıtlama türlerini ele alalım.

Birincil ve benzersiz anahtarlar

Birincil anahtarlar, veritabanı kısıtlamalarının ana türlerinden biridir. Tablodaki kayıtların tek değerli tanımlanması için uygulanırlar. Bir veritabanında bir kişi listesi sakladığımızı varsayalım. Aynı soyadı, adı ve soyadı olan iki (veya daha fazla) kişinin olması oldukça olasıdır. Bir kişiyi diğerinden nasıl ayırt edebiliriz (elbette, soru bir veritabanında saklanan bilgilere göre bir kişiyi diğerinden ayırt etmektir)?

Bu durumda, “kişi” tablodaki bir kayıtla temsil edilir, bu nedenle daha genel bir soru sorabiliriz - (herhangi bir) tablodaki bir kaydı aynı tablodaki diğer kayıttan nasıl ayırt edebiliriz? Bu amaçla, birincil anahtar kısıtlamaları kullanılır. Birincil anahtar, tablodaki her kayıt için benzersiz olan bir veya birkaç alanı temsil eder. Bir tablo için birincil anahtarın tekrarlanan değerleri yoktur.

Benzersiz anahtarlar aynı işlevi görür - ayrıca tablodaki kayıtların tek değerli tanımlanmasına hizmet ederler. Birincil ve benzersiz anahtarlar arasındaki fark, tabloda yalnızca bir birincil anahtar olabilmesi, benzersiz anahtarların ise birkaç tane olabilmesidir. Hem birincil hem de benzersiz anahtarın, yabancı anahtarlar için referans temeli olarak kullanılabileceği belirtilmiştir (aşağıya bakınız).

Birincil ve benzersiz anahtarların kavramlarının resmi açıklaması ve diğer önemli tanımlar, kitabın sonundaki “Sözlük” uygulamasında bulunabilir. Benzersiz bir alana dayalı birincil ve benzersiz anahtar oluşturmanın sözdizimi aşağıdaki gibidir:

< pkukconstraint > = [CONSTRAINT constraint] {PRIMARY KEY | UNIQUE}

Birincil ve benzersiz anahtar örnekleri:

CREATE TABLE pkuk( pk NUMERIC(15,0) NOT NULL PRIMARY KEY, /*birincil anahtar*/

uk1 VARCHAR(50) NOT NULL UNIQUE,/*benzersiz anahtar */

uk2 INTEGER NOT NULL UNIQUE /\* bir benzersiz anahtar daha */);

Birkaç alana dayalı birincil ve benzersiz anahtarların oluşturulmasının sözdizimi:

= [CONSTRAINT constraint] {PRIMARY KEY | UNIQUE} ( col [, col …])

Bu sözdizimi, alanların bir kombinasyonuna dayalı anahtarlar oluşturmayı sağlar. Birkaç alandan birincil ve benzersiz anahtarlar oluşturma örnekleri:

CREATE TABLE pkuk2( Number1 INTEGER NOT NULL, Name1 VARCHAR(50) NOT NULL, Kol INTEGER NOT NULL, Stoim NUMERIC(15,4) NOT NULL, CONSTRAINT pkt PRIMARY KEY (Number1, Name1), /*iki alana dayalı pkt birincil anahtarı*/ CONSTRAINT ukt1 UNIQUE (kol, Stoim)); /*iki alana dayalı ukt1 benzersiz anahtarı*/

Birincil ve benzersiz anahtar kısıtlamalarına dahil edilen tüm alanların NOT NULL olarak bildirilmesi gerektiğine dikkat edin, çünkü bu anahtarlar tanımsız bir değere sahip olamaz. Tablo oluştururken birincil ve benzersiz anahtar kısıtlaması oluşturmanın yanı sıra, zaten var olan bir tabloya kısıtlama ekleme yeteneği de vardır. Bu durumda DDL: ALTER TABLE ifadesi kullanılır. Mevcut bir tabloya birincil veya benzersiz anahtar kısıtlamaları eklemenin sözdizimi yukarıda açıklanana benzer:

ALTER TABLE tablename ADD [CONSTRAINT constraint] {PRIMARY KEY | UNIQUE} ( col [, col …])

ALTER TABLE kullanarak birincil ve benzersiz anahtar oluşturma örneğini ele alalım:

CREATE TABLE pkalter( ID1 INTEGER NOT NULL, ID2 INTEGER NOT NULL, UID VARCHAR(24));

Sonra anahtarları ekleriz. Önce birincil:

ALTER TABLE pkalter ADD CONSTRAINT pkal1 PRIMARY KEY (id1, id2);

Sonra benzersiz: ALTER TABLE pkalter ADD CONSTRAINT ukal UNIQUE (uid);

Belirtilmelidir ki, yalnızca bu tablonun sahibi veya sistem yöneticisi SYSDBA (sahipler ve SYSDBA kullanıcısı hakkında daha fazla ayrıntı için “InterBase’de Güvenlik: kullanıcılar, işlevleri ve hakları” bölümüne bakın - bölüm 4) tabloya birincil ve benzersiz anahtar ekleme (ve silme) işlemini gerçekleştirebilir.

Yabancı anahtarlar

InterBase veritabanlarında sıkça kullanılan bir sonraki kısıtlama, yabancı anahtar kısıtlamasıdır. Bu, bir veritabanında referans bütünlüğünü sağlamak için çok güçlü bir araçtır; yalnızca veritabanında doğru referansların varlığını denetlemekle kalmaz, aynı zamanda bu referansları otomatik olarak kontrol etmenizi sağlar!

Yabancı anahtar oluşturmanın amacı şudur: iki tablo birbiriyle ilişkili bilgileri saklamak için hizmet ediyorsa, bu ilişkinin her zaman doğru olacağını garanti etmek gerekir. Örneğin, “irsaliye” belgesi genel başlık (tarih, irsaliye numarası vb.) ve bir dizi ayrıntılı kayıt (mal açıklaması, miktar vb.) içerir.

Böyle bir belgeyi saklamak için veritabanında iki tablo oluşturulur - biri irsaliyelerin başlıklarını saklamak için, ikincisi ise irsaliyenin içeriğini - mallar ve miktarları hakkındaki kayıtları saklamak için. Bu tür tablolara ana ve alt veya ana tablo ve detay tablosu denir.

Sağduyuya göre, irsaliyenin içeriği, başlığının varlığı olmadan var olamaz. Başka bir deyişle, irsaliyenin başlığını oluşturmadıysak mal hakkında bir kayıt ekleyemeyiz ve mallar hakkında kayıtlar varsa başlık kaydını silemeyiz. Bu davranışı gerçekleştirmek için, başlık tablosu ve detay tablosu bir yabancı anahtar kısıtlaması kullanılarak birleştirilir.

Yabancı anahtar kısıtlamaları kurmanın anlamını, irsaliyeler hakkında bilgi içeren tablolar örneğiyle ele alalım. Bu amaçla, irsaliyeyi saklamak için iki tablo oluşturacağız - başlığı saklamak için TITLE tablosu ve irsaliyeye dahil edilen mallar hakkındaki bilgileri saklamak için INVENTORY tablosu.

CREATE TABLE TITLE( ID_TITLE INTEGER NOT NULL Primary Key, DateNakl DATE, NumNakl INTEGER, NoteNakl VARCHAR(255));

Başlık tablosunda ID_TITLE alanına dayalı birincil anahtarı hemen tanımladığımıza dikkat edin. TITLE tablosunun geri kalan alanları, irsaliye başlığı hakkında önemsiz bilgiler içerir - tarih, numara, yorum.

Şimdi irsaliyeye dahil edilen mallar hakkındaki bilgileri saklamak için tabloyu tanımlayalım:

CREATE TABLE INVENTORY( ID_INVENTORY INTEGER NOT NULL PRIMARY KEY, FK_TITLE INTEGER NOT NULL, ProductName VARCHAR (255), Kolvo DOUBLE PRECISION, Positio INTEGER);

INVENTORY tablosuna hangi alanların dahil edildiğini görelim. İlk olarak, ID_INVENTORY - bu tablonun birincil anahtarı. Sonra, irsaliye başlıkları tablosundaki ID_TITLE başlığının tanımlayıcısına referans görevi gören tamsayı alanı FK_TITLE gelir. Ardından, malın açıklamasını, miktarını ve irsaliyedeki konumunu tanımlayan ProductName, Kolvo ve Positio alanları gelir. FK_TITLE alanı örneğimiz için en önemlisidir. Belirli bir irsaliyenin malları hakkındaki bilgileri görüntülemek istiyorsak, mas_ID_TITLE parametresinin başlık tanımlayıcısını tanımladığı aşağıdaki sorguyu kullanmalıyız:

SELECT * FROM INVENTORY I1 WHERE I1.FK_TITLE=?mas_ID_TITLE

Aslında, açıklanan durumda hiçbir şey INVENTORY tablosunu TITLE tablosunda var olmayan kayıtlara referans veren kayıtlarla doldurmayı engellemez. Ayrıca, zaten var olan bir irsaliyenin başlığını silmeyi de hiçbir şey engellemez, bu nedenle mallar hakkındaki kayıtlar “sahipsiz” hale gelebilir. Sunucu, tüm bu ekleme ve silme işlemlerini yasaklamaz. Böylece, veritabanındaki veri bütünlüğü üzerindeki kontrol tamamen istemci uygulamasına bırakılır. Ancak, belki de farklı programcılar tarafından geliştirilen birkaç uygulamanın tek bir veritabanıyla çalışabileceğini biliyorsunuz; bu da farklı veri yorumlamalarına ve hatalara yol açabilir. Sonuç olarak, yalnızca irsaliye başlığına doğru referansa sahip mallar hakkındaki kayıtların INVENTORY tablosuna konulabileceği açık kısıtlamayı belirlemek önemlidir. Bu, aslında, kısıtlamalara dahil edilen alanlara yalnızca diğer tabloda bulunan değerlerin eklenmesine izin veren bir yabancı anahtar kısıtlamasıdır.

Böyle bir kısıt, yabancı anahtar kullanılarak oluşturulabilir. Verilen örnek için, FK_TITLE alanı için yabancı anahtar kısıtları belirlememiz ve bunu TITLE içindeki ID_TITLE birincil anahtarına bağlamamız gerekir. Mevcut bir tabloya aşağıdaki komutla yabancı anahtar ekleyebiliriz:

ALTER TABLE INVENTORY ADD CONSTRAINT fktitle1 FOREIGN KEY(FK_TITLE) REFERENCES TITLE(ID_TITLE)

Yabancı anahtar eklerken sıklıkla “object is in use” (nesne kullanımda) hatası ortaya çıkar. Mesele şu ki, yabancı anahtar oluşturmak için veritabanını tek kullanıcılı modda açmamız gerekir - yani aynı anda başka kullanıcı olmamalıdır. Ayrıca değiştirilen tabloya referans vermemeliyiz - bu da “object is in use” hatasına neden olabilir.

Burada INVENTORY, yabancı anahtar kısıtının ayarlandığı tablonun adıdır; fktitle1 yabancı anahtarın adıdır; FK_TITLE - yabancı anahtarı oluşturan alanlardır; TITLE, yabancı anahtar için değerleri (referans temelini) sağlayan tablonun adıdır; ID_TITLE - TITLE tablosundaki, yabancı anahtar için referans temeli olarak hizmet eden birincil veya benzersiz anahtar alanlarıdır. Yabancı anahtar kısıtının tam sözdizimi (birkaç alana dayalı kısıtlar oluşturma imkânıyla birlikte) aşağıda verilmiştir:

= [CONSTRAINT constraint] FOREIGN KEY ( col [, col …]) REFERENCES other_table [( other_col [, other_col …])] [ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}] [ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

Gördüğünüz gibi, tanımlar geniş bir seçenek kümesi içerir. Başlangıç olarak, gerçek veritabanlarında en sık kullanılan yabancı anahtarın temel tanımını ele alalım ve ardından olası seçenekleri analiz edelim.

Yabancı anahtar kısıtının bildirimsel biçimi, çoğunlukla kısıtı oluşturacak alanlar kümesi (col [, col …]) belirtildiğinde kullanılır; ayrıca alanlarda yabancı anahtar için olası değerlerin listesini içeren other_table [(other_col [, other_col …])] belirtilir.

Tablo oluşturulurken böyle bir tanımın örneği aşağıdadır:

CREATE TABLE Inventory2( … FK_TABLE INTEGER NOT NULL CONSTRAINT fkinv REFERENCES TITLE(ID_TITLE) …);

Bu tanımda FOREIGN KEY anahtar kelimelerinin atlandığına ve tek alan FK_TITLE’nin yabancı anahtar olarak kullanılacağının ima edildiğine dikkat edin. Tabloyla aynı anda yabancı anahtar oluşturmanın daha eksiksiz bir biçimi aşağıdaki örnekte verilmiştir:

CREATE TABLE Inventory2( … FK_TABLE INTEGER NOT NULL, CONSTRAINT fkinv FOREIGN KEY (FK_TABLE) REFERENCES TITLE(ID_TITLE) …);

Yabancı anahtar alanlarında NULL kullanımı

Yabancı anahtarın oluşturulduğu alanlarda NULL alanlarının kullanılmasına izin verilir. Bu olasılık, karşılıklı referanslara izin vermek için eklenmiştir. Örneğin, birbirine yabancı anahtarlarla referans veren iki tablo varsa. Bu yabancı anahtarlarda boş referansa (yani NULL için) izin vermezsek, birleştirilmiş tablolara herhangi bir kayıt eklemek imkânsız olacaktır: ilk tabloya kayıt eklemek için ikinci tabloda bir kaydın olması gerekir ve bunun tersi de geçerlidir.

Boş referans olarak NULL kullanmak, birbirine çapraz referans veren iki tablonun karşılıklı referanslarını oluşturmayı ve ayrıca ilişkisel tablolarda hiyerarşik yapıları saklamayı sağlar - bu durumda kök düğümler “boş” kayıtlara referans verir (yani basitçe NULL içerir).

Yabancı anahtar kullanarak referans bütünlüğü desteğinin genişletilmiş yetenekleri

Genellikle yabancı anahtar kısıtının bildirimsel varyantı oldukça yeterlidir; sunucu yalnızca yabancı anahtarı olan tabloya yanlış değerler eklemenin imkânsız olacağını izler veya - bunu yapmaya çalışırsanız bir hata oluşur. Ancak InterBase, yabancı anahtarı değiştirirken/silerken bir dizi otomatik işlem yürütmeye izin verir. Bu amaçla, aşağıdaki yabancı anahtar seçenekleri kümesi kullanılır:

[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}] [ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

Bu seçenekler, yabancı anahtar değerlerini güncellerken veya silerken farklı işlemler tanımlamaya izin verir.

Örneğin, ana tablodaki birincil anahtarı silerken, alt tablodaki aynı yabancı anahtara sahip tüm kayıtların silinmesini ayarlayabiliriz. Bu durumda, yabancı anahtarı aşağıdaki şekilde tanımlamamız gerekir:

ALTER TABLE INVENTORY ADD CONSTRAINT fkautodel FOREIGN KEY (FK_TITLE) REFERENCES TITLE(ID_TITLE) ON DELETE CASCADE

Aslında, bu işlemlerin uygulanması için belirli işlemleri yürüten bir sistem tetikleyicisi vardır. Tablo 1.2’de farklı seçeneklerin işlemlerinin bir açıklaması vardır (NO ACTION|CASCADE|SET DEFAULT|SET NULL seçeneklerinin tek bir ON XXX cümlesinde kullanılamayacağına dikkat edin).

Tablo 1.2

Olay İşlem
NO ACTION CASCADE SET DEFAULT SET NULL
ON DELETE Yabancı anahtarı silerken hiçbir şey yapma - varsayılan olarak kullanılır Silme sırasında alt tablodaki tüm ilgili kayıtları sil Değiştirirken
yabancı anahtar alanını varsayılan değer olarak ayarla
Değiştirirken
yabancı anahtar alanını NULL olarak ayarla
ON UPDATE Değiştirirken hiçbir şey yapma - varsayılan olarak kullanılır Bir kaydı değiştirirken alt tablodaki tüm ilgili kayıtları değiştir Silerken
yabancı anahtar alanını varsayılan değer olarak ayarla
Silerken
yabancı anahtar alanını NULL olarak ayarla

Hiçbir şey belirtmezsek veya NO ACTION belirtirsek, yabancı anahtarı değiştirmekle (birincil anahtarı değiştirirken) kendimiz ilgilenmeliyiz ve birincil anahtarı silerken alt tablodaki kayıtları önceden silmeliyiz. CASCADE seçeneğini kullanırken çok dikkatli olun: dikkatsiz kullanımı çok sayıda ilgili kaydın silinmesine yol açabilir.

CHECK kısıtı

Bir veritabanındaki en kullanışlı kısıtlardan biri check kısıtıdır. İşlevi çok basittir - tabloya eklenen değeri herhangi bir koşula göre kontrol etmek ve bu koşulun yerine getirilmesine göre veriyi eklemek veya eklememek. Sözdizimi oldukça basittir:

= [CONSTRAINT constraint] CHECK ( )}

Burada constraint kısıtın adıdır; eklenen / güncellenen değerin parametre olarak kullanılabileceği bir arama koşuludur. Arama koşulu yerine getirilirse, bu değeri eklemek / güncellemek izin verilir, yerine getirilmezse - bir hata oluşur. Check’in en basit örneği:

create table checktst( ID integer CHECK(ID>0));

Bu check, ID alanının eklenen / güncellenen değerinin sıfırdan büyük olup olmadığını belirler ve sonuca bağlı olarak yeni bir değerin eklenmesine / güncellenmesine izin verir veya hata hakkında bilgi verir (bkz. “InterBase saklı prosedürleri dilinin genişletilmiş yetenekleri” bölümü (bölüm 1)).

Ayrıca daha karmaşık check varyantları da vardır. Arama koşulunun tam sözdizimi aşağıdaki gibidir:

= {

{ | ()}

| [NOT] BETWEEN AND

| [NOT] LIKE [ESCAPE ]

| [NOT] IN ( [ , …] | )

| IS [NOT] NULL

| {[NOT] {= | < | >} | >= | <=}

{ALL | SOME | ANY} ()

| EXISTS ( )

| SINGULAR ( )

| [NOT] CONTAINING

| [NOT] STARTING [WITH]

| ()

| NOT

| OR

| AND }

Böylece CHECK, eklenen / güncellenen değerleri kontrol etmek için geniş bir seçenek kümesi verir. CHECK kullanırken aşağıdaki kısıtlamaları hatırlamalısınız:

  • CHECK için veriler yalnızca geçerli kayıttan alınır. CHECK içindeki ifade için verileri aynı tablonun diğer kayıtlarından almamalısınız - bunlar diğer kullanıcılar tarafından değiştirilebilir
  • Bir alan yalnızca bir CHECK kısıtına sahip olabilir
  • CHECK alan kısıtına sahip bir domain alan tanımı için kullanılıyorsa, tablodaki belirli bir alan düzeyinde yeniden tanımlanamaz. CHECK’lerin sistem tetikleyicileri tarafından uygulandığı söylenmelidir, bu nedenle kayıt ekleme ve güncelleme işlemlerini ciddi şekilde yavaşlatabilen çok uzun koşulları kullanırken daha dikkatli olmalıyız.

Kısıtları silme

Çok sık olarak, çok farklı nedenlerle çeşitli kısıtları sileriz. Bir kısıtı silmek için, aşağıdaki görünümdeki ALTER TABLE ifadesini kullanmalıyız: ALTER TABLE tablename DROP CONSTRAINT constraintname

constraintname, silinmesi gereken kısıtın adıdır. Kısıt oluşturulurken belirli bir ad belirtildiyse, onu kullanmalıyız, ancak belirtilmediyse, herhangi bir InterBase yönetim aracını açmamız, onunla ilgili tüm kısıtları aramamız ve InterBase’in gerekli kısıt için hangi sistem adını oluşturduğunu bulmamız gerekir.

Yalnızca tablonun sahibinin veya SYSDBA sistem yöneticisinin kısıtları silebileceği unutulmamalıdır.