DB2 - ograniczenia

W tym rozdziale opisano różne ograniczenia w bazie danych.

Wprowadzenie

Aby wymusić integralność bazy danych, zdefiniowano zestaw reguł zwanych ograniczeniami. Ograniczenia zezwalają lub zabraniają wartości w kolumnach.

W działaniach bazy danych w czasie rzeczywistym dane powinny być dodawane z pewnymi ograniczeniami. Na przykład w bazie danych sprzedaży identyfikator-sprzedaży lub identyfikator-transakcji powinien być niepowtarzalny. Typy ograniczeń to:

  • NIE JEST ZEREM
  • Unique
  • Klucz podstawowy
  • Klucz obcy
  • Check
  • Informational

Wiązania są powiązane tylko z tabelami. Stosowane są tylko do określonych tabel. Są one definiowane i stosowane do tabeli w czasie tworzenia tabeli.

Wyjaśnienie każdego ograniczenia:

NIE JEST ZEREM

Regułą jest zabronienie wartości null z jednej lub więcej kolumn w tabeli.

Syntax:

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

Example: [Aby utworzyć tabelę sprzedaży z czterema kolumnami (identyfikator, nazwa przedmiotu, ilość, cena) w tym dodaniu ograniczeń „niezerowych” do wszystkich kolumn, aby uniknąć tworzenia pustych komórek w tabeli.]

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

Wstawianie wartości NOT NULL do tabeli

Możesz wstawić wartości do tabeli, jak pokazano poniżej:

Example: [ERRORoneous Query]

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

Output: [Poprawne zapytanie]

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: [Poprawne zapytanie]

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.

Unikalne ograniczenia

Korzystając z tych ograniczeń, można ustawić wartości kolumn w unikalny sposób. W tym celu unikalne ograniczenia są deklarowane jako „niezerowe” w momencie tworzenia tabeli.

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)

Wstawianie wartości do tabeli

Example: Aby wstawić cztery różne wiersze z unikalnymi identyfikatorami, takimi jak 1, 2, 3 i 4.

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: Aby wstawić nowy wiersz z wartością „id” 3

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

Output: kiedy spróbujesz wstawić nowy wiersz z istniejącą wartością identyfikatora, pokaże ten wynik:

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

Klucz podstawowy

Podobnie jak w przypadku ograniczeń unikatowych, można używać ograniczeń „klucza podstawowego” i „klucza obcego” do deklarowania relacji między wieloma tabelami.

Syntax:

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

Example: Aby utworzyć tabelę „Salesboys” z „sid” jako kluczem podstawowym

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))

Klucz obcy

Klucz obcy to zestaw kolumn w tabeli, które są wymagane do dopasowania co najmniej jednego klucza podstawowego z wiersza w innej tabeli. Jest to ograniczenie referencyjne lub ograniczenie integralności referencyjnej. Jest to logiczna reguła dotycząca wartości w wielu kolumnach w jednej lub kilku tabelach. Umożliwia wymaganą relację między tabelami.

Wcześniej utworzyłeś tabelę o nazwie „shopper.salesboys”. W tej tabeli klucz podstawowy to „sid”. Teraz tworzysz nową tabelę zawierającą dane osobowe sprzedawcy z innym schematem o nazwie „pracownik” i tabelą o nazwie „sprzedawcy”. W tym przypadku „sid” jest kluczem obcym.

Syntax:

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

Example: [Aby utworzyć tabelę o nazwie „Salesboys” z kolumną klucza obcego „sid”]

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: [Wstawianie wartości do tabeli kluczy podstawowych „shopper.salesboys”]

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: [Wstawianie wartości do tabeli kluczy obcych „pracownik.salesboys” [bez błędu]]

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

Jeśli podałeś nieznany numer, który nie jest przechowywany w tabeli „shopper.salesboys”, wyświetli się błąd SQL.

Example: [wykonanie błędu]

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

Sprawdzanie ograniczenia

Musisz użyć tego ograniczenia, aby dodać ograniczenia warunkowe dla określonej kolumny w tabeli.

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>