DB2 - Kısıtlamalar

Bu bölüm, veri tabanındaki çeşitli kısıtlamaları açıklamaktadır.

Giriş

Veritabanı bütünlüğünü güçlendirmek için kısıtlar adı verilen bir dizi kural tanımlanmıştır. Kısıtlamalar sütunlardaki değerlere ya izin verir ya da yasaklar.

Gerçek zamanlı veritabanı etkinliklerinde, veriler belirli kısıtlamalarla eklenmelidir. Örneğin, bir satış veritabanında satış kimliği veya işlem kimliği benzersiz olmalıdır. Kısıtlama türleri şunlardır:

  • GEÇERSİZ DEĞİL
  • Unique
  • Birincil anahtar
  • Yabancı anahtar
  • Check
  • Informational

Kısıtlamalar yalnızca tablolarla ilişkilidir. Yalnızca belirli tablolara uygulanırlar. Tablo oluşturma sırasında tanımlanır ve tabloya uygulanır.

Her kısıtlamanın açıklaması:

GEÇERSİZ DEĞİL

Tablodaki bir veya daha fazla sütundan boş değerleri yasaklamak bir kuraldır.

Syntax:

db2 create table <table_name>(col_name col_type not null,..)

Example: [Tabloda herhangi bir boş hücre oluşmasını önlemek için tüm sütunlara "boş olmayan" kısıtlamalar ekleyen, dört sütuna (id, öğe adı, miktar, fiyat) sahip bir satış tablosu oluşturmak için.]

db2 create table shopper.sales(id bigint not null, itemname 
varchar(40) not null, qty int not null,price double not null)

NOT NULL değerleri tabloya ekleme

Tabloya aşağıda gösterildiği gibi değerler ekleyebilirsiniz:

Example: [ERRORoneous Query]

db2 insert into shopper.sales(id,itemname,qty) 
values(1,'raagi',12)

Output: [Doğru sorgu]

DB21034E  The command was processed as an SQL statement because 
it was not a 

valid Command Line Processor command.  During SQL processing 
it returned: 

SQL0407N  Assignment of a NULL value to a NOT NULL column 
"TBSPACEID=5, 

TABLEID=4, COLNO=3" is not allowed.  SQLSTATE=23502

Example: [Doğru sorgu]

db2 insert into shopper.sales(id,itemname,qty,price) 
values(1,'raagi',12, 120.00)  

db2 insert into shopper.sales(id,itemname,qty,price) 
values(1,'raagi',12, 120.00)

Output:

DB20000I The SQL command completed successfully.

Benzersiz kısıtlamalar

Bu kısıtlamaları kullanarak, sütunların değerlerini benzersiz şekilde ayarlayabilirsiniz. Bunun için, benzersiz kısıtlamalar tablo yaratılırken "boş değil" kısıtlaması ile bildirilir.

Syntax:

db2 create table <tab_name>(<col> <col_type> not null unique, ...)

Example:

db2 create table shopper.sales1(id bigint not null unique, 
itemname varchar(40) not null, qty int not null,price 
double not null)

Değerleri tabloya eklemek

Example: 1, 2, 3 ve 4 gibi benzersiz kimliklere sahip dört farklı satır eklemek için.

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(1, 'sweet', 100, 89)  

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(2, 'choco', 50, 60)  

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(3, 'butter', 30, 40)  

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(4, 'milk', 1000, 12)

Example: "İd" değeri 3 olan yeni bir satır eklemek için

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(3, 'cheese', 60, 80)

Output: mevcut id değerine sahip yeni bir satır eklemeye çalıştığınızda, şu sonucu gösterecektir:

DB21034E  The command was processed as an SQL statement 
because it was not a 

valid Command Line Processor command.  During 
SQL processing it returned: 

SQL0803N  One or more values in the INSERT statement, 
UPDATE statement, or foreign key update caused by a
DELETE statement are not valid because the primary key, 
unique constraint or unique index identified by "1" constrains 
table "SHOPPER.SALES1" from having duplicate values for the 
index key. SQLSTATE=23505

Birincil anahtar

Benzersiz kısıtlamalara benzer şekilde, birden çok tablo arasındaki ilişkileri bildirmek için bir "birincil anahtar" ve bir "yabancı anahtar" kısıtlaması kullanabilirsiniz.

Syntax:

db2 create table <tab_name>( 
      
       ,.., primary key ()) 
      

Example: Birincil anahtar olarak "sid" ile "satıcılar" tablosu oluşturmak için

db2 create table shopper.salesboys(sid int not null, name 
varchar(40) not null, salary double not null, constraint 
pk_boy_id primary key (sid))

Yabancı anahtar

Yabancı anahtar, başka bir tablodaki bir satırın en az bir birincil anahtarıyla eşleşmesi için gerekli olan bir tablodaki sütun kümesidir. Bu bir bilgi kısıtlaması veya bilgi tutarlılığı kısıtlamasıdır. Bir veya daha fazla tablodaki birden çok sütundaki değerler hakkında mantıksal bir kuraldır. Tablolar arasında gerekli ilişkiyi sağlar.

Daha önce, "shopper.salesboys" adlı bir tablo oluşturdunuz. Bu tablo için birincil anahtar "sid" dir. Şimdi "çalışan" adlı farklı şema ve "satıcılar" adlı tablo ile satış elemanının kişisel detaylarının bulunduğu yeni bir tablo oluşturuyorsunuz. Bu durumda, "sid" yabancı anahtardır.

Syntax:

db2 create table <tab_name>(<col> <col_type>,constraint 
<const_name> foreign key (<col_name>)  
                  reference <ref_table> (<ref_col>)

Example: [Yabancı anahtar sütunu 'sid' ile 'salesboys' adlı bir tablo oluşturmak için]

db2 create table employee.salesboys( 
            sid int,  
            name varchar(30) not null,  
            phone int not null,  
            constraint fk_boy_id  
            foreign key (sid)  
            references shopper.salesboys (sid) 
			 on delete restrict 
                       )

Example: ["Shopper.salesboys" birincil anahtar tablosuna değerler ekleme]

db2 insert into shopper.salesboys values(100,'raju',20000.00), 
(101,'kiran',15000.00), 
(102,'radha',10000.00), 
(103,'wali',20000.00), 
(104,'rayan',15000.00)

Example: ["Employee.salesboys" yabancı anahtar tablosuna değerler ekleme [hatasız]]

db2 insert into employee.salesboys values(100,'raju',98998976), 
(101,'kiran',98911176), 
(102,'radha',943245176), 
(103,'wali',89857330),  
(104,'rayan',89851130)

“Shopper.salesboys” tablosunda saklanmayan bilinmeyen bir numara girdiyseniz, size SQL hatası gösterecektir.

Example: [hata yürütme]

db2 insert into employee.salesboys values(105,'rayan',89851130)

Output:

DB21034E  The command was processed as an SQL statement because it 
was not a valid Command Line Processor command.  During SQL 
processing it returned: SQL0530N  The insert or update value of 
the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any 
value of the parent key of the parent table.  SQLSTATE=23503

Kısıtlama kontrol ediliyor

Bir tablodaki belirli bir sütuna koşullu kısıtlamalar eklemek için bu kısıtlamayı kullanmanız gerekir.

Syntax:

db2 create table 
      
        (
        
        
          primary key (
         
          ), constraint 
          
            check (condition or condition) ) 
          
         
        
       
      

Example: [To create emp1 table with constraints values]

db2 create table empl                                                     
 (id           smallint not null,                                         
  name         varchar(9),                                                
  dept         smallint check (dept between 10 and 100), 
  job          char(5)  check (job in ('sales', 'mgr', 'clerk')), 
  hiredate     date,                                                      
  salary       decimal(7,2),                                              
  comm         decimal(7,2),                                              
  primary key (id),                                                       
  constraint yearsal check (year(hiredate) > 1986 or salary > 40500)  
 )
 

Inserting values

You can insert values into a table as shown below:

db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' , 
40000.00, 1000.00) 

Dropping the constraint

Let us see the syntaxes for dropping various constraints.

Dropping UNIQUE constraint

Syntax:

db2 alter table <tab_name> drop unique <const_name>

Dropping primary key

Syntax:

db2 alter table <tab_name> drop primary key 

Dropping check constraint

Syntax:

db2 alter table <tab_name> drop check <check_const_name>  

Dropping foreign key

Syntax:

db2 alter table <tab_name> drop foreigh key <foreign_key_name>