DB2 - Einschränkungen

In diesem Kapitel werden verschiedene Einschränkungen in der Datenbank beschrieben.

Einführung

Um die Datenbankintegrität zu erzwingen, wird eine Reihe von Regeln definiert, die als Einschränkungen bezeichnet werden. Die Einschränkungen erlauben oder verbieten die Werte in den Spalten.

Bei einer Echtzeitdatenbankaktivität sollten die Daten mit bestimmten Einschränkungen hinzugefügt werden. Beispielsweise sollte in einer Verkaufsdatenbank die Verkaufs-ID oder die Transaktions-ID eindeutig sein. Die Einschränkungstypen sind:

  • NICHT NULL
  • Unique
  • Primärschlüssel
  • Unbekannter Schlüssel
  • Check
  • Informational

Einschränkungen sind nur Tabellen zugeordnet. Sie werden nur auf bestimmte Tabellen angewendet. Sie werden zum Zeitpunkt der Tabellenerstellung definiert und auf die Tabelle angewendet.

Erläuterung jeder Einschränkung:

NICHT NULL

Es ist eine Regel, Nullwerte aus einer oder mehreren Spalten in der Tabelle zu verbieten.

Syntax:

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

Example: [Um eine Verkaufstabelle mit vier Spalten (ID, Artikelname, Menge, Preis) zu erstellen, fügen Sie allen Spalten "Nicht-Null" -Einschränkungen hinzu, um zu vermeiden, dass eine Nullzelle in der Tabelle gebildet wird.]

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

Einfügen von NOT NULL-Werten in die Tabelle

Sie können Werte wie folgt in die Tabelle einfügen:

Example: [FEHLERHAFTE Abfrage]

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

Output: [Richtige Abfrage]

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: [Richtige Abfrage]

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.

Einzigartige Einschränkungen

Mit diesen Einschränkungen können Sie die Werte von Spalten eindeutig festlegen. Zu diesem Zweck werden die eindeutigen Einschränkungen zum Zeitpunkt der Tabellenerstellung mit der Einschränkung "nicht null" deklariert.

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)

Einfügen der Werte in die Tabelle

Example: So fügen Sie vier verschiedene Zeilen mit eindeutigen IDs wie 1, 2, 3 und 4 ein.

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: So fügen Sie eine neue Zeile mit dem Wert "id" ein 3

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

Output: Wenn Sie versuchen, eine neue Zeile mit vorhandenem ID-Wert einzufügen, wird das folgende Ergebnis angezeigt:

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

Primärschlüssel

Ähnlich wie bei den eindeutigen Einschränkungen können Sie eine Einschränkung für "Primärschlüssel" und "Fremdschlüssel" verwenden, um Beziehungen zwischen mehreren Tabellen zu deklarieren.

Syntax:

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

Example: Um eine 'Salesboys'-Tabelle mit' sid 'als Primärschlüssel zu erstellen

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

Unbekannter Schlüssel

Ein Fremdschlüssel ist eine Reihe von Spalten in einer Tabelle, die mindestens einem Primärschlüssel einer Zeile in einer anderen Tabelle entsprechen müssen. Es handelt sich um eine referenzielle Einschränkung oder eine referenzielle Integritätsbedingung. Es ist eine logische Regel für Werte in mehreren Spalten in einer oder mehreren Tabellen. Es ermöglicht die erforderliche Beziehung zwischen den Tabellen.

Zuvor haben Sie eine Tabelle mit dem Namen "shopper.salesboys" erstellt. Für diese Tabelle lautet der Primärschlüssel "sid". Jetzt erstellen Sie eine neue Tabelle mit den persönlichen Daten des Vertriebsmitarbeiters mit einem anderen Schema namens "Mitarbeiter" und einer Tabelle mit dem Namen "Salesboys". In diesem Fall ist "sid" der Fremdschlüssel.

Syntax:

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

Example: [So erstellen Sie eine Tabelle mit dem Namen 'salesboys' mit der Fremdschlüsselspalte '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: [Einfügen von Werten in die Primärschlüsseltabelle "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: [Einfügen von Werten in die Fremdschlüsseltabelle "employee.salesboys" [ohne Fehler]]

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

Wenn Sie eine unbekannte Nummer eingegeben haben, die nicht in der Tabelle "shopper.salesboys" gespeichert ist, wird ein SQL-Fehler angezeigt.

Example: [Fehlerausführung]

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

Einschränkung überprüfen

Sie müssen diese Einschränkung verwenden, um bedingte Einschränkungen für eine bestimmte Spalte in einer Tabelle hinzuzufügen.

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>