DB2 - Contraintes

Ce chapitre décrit les différentes contraintes de la base de données.

introduction

Pour renforcer l'intégrité de la base de données, un ensemble de règles est défini, appelé contraintes. Les contraintes autorisent ou interdisent les valeurs dans les colonnes.

Dans les activités d'une base de données en temps réel, les données doivent être ajoutées avec certaines restrictions. Par exemple, dans une base de données de ventes, sales-id ou transaction-id doit être unique. Les types de contraintes sont:

  • PAS NULL
  • Unique
  • Clé primaire
  • Clé étrangère
  • Check
  • Informational

Les contraintes ne sont associées qu'aux tables. Ils ne sont appliqués qu'à des tables particulières. Ils sont définis et appliqués à la table au moment de la création de la table.

Explication de chaque contrainte:

PAS NULL

C'est une règle d'interdire les valeurs nulles d'une ou plusieurs colonnes dans la table.

Syntax:

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

Example: [Pour créer une table de ventes, avec quatre colonnes (id, nom de l'article, quantité, prix) dans ce qui ajoute des contraintes «non nulles» à toutes les colonnes pour éviter de former une cellule nulle dans le tableau.]

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

Insertion de valeurs NOT NULL dans la table

Vous pouvez insérer des valeurs dans le tableau comme indiqué ci-dessous:

Example: [ERRORoneous Query]

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

Output: [Requête correcte]

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: [Requête correcte]

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.

Contraintes uniques

En utilisant ces contraintes, vous pouvez définir les valeurs des colonnes de manière unique. Pour cela, les contraintes uniques sont déclarées avec une contrainte «non nulle» au moment de la création de la table.

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)

Insertion des valeurs dans le tableau

Example: Pour insérer quatre lignes différentes avec des identifiants uniques comme 1, 2, 3 et 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: Pour insérer une nouvelle ligne avec la valeur «id» 3

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

Output: lorsque vous essayez d'insérer une nouvelle ligne avec une valeur d'identification existante, le résultat s'affiche:

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

Clé primaire

Comme pour les contraintes uniques, vous pouvez utiliser une contrainte «clé primaire» et «clé étrangère» pour déclarer des relations entre plusieurs tables.

Syntax:

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

Example: Pour créer une table "salesboys" avec "sid" comme clé primaire

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

Clé étrangère

Une clé étrangère est un ensemble de colonnes dans une table qui doivent correspondre à au moins une clé primaire d'une ligne dans une autre table. C'est une contrainte référentielle ou une contrainte d'intégrité référentielle. Il s'agit d'une règle logique concernant les valeurs de plusieurs colonnes dans une ou plusieurs tables. Il permet la relation requise entre les tables.

Auparavant, vous avez créé une table nommée «shopper.salesboys». Pour cette table, la clé primaire est «sid». Vous créez maintenant une nouvelle table qui contient les détails personnels des vendeurs avec un schéma différent nommé «employé» et une table nommée «vendeurs». Dans ce cas, «sid» est la clé étrangère.

Syntax:

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

Example: [Pour créer une table nommée 'salesboys' avec la colonne de clé étrangère '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: [Insertion de valeurs dans la table de clé primaire "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: [Insertion de valeurs dans la table de clé étrangère "employee.salesboys" [sans erreur]]

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

Si vous avez entré un nombre inconnu, qui n'est pas stocké dans la table «shopper.salesboys», il vous montrera une erreur SQL.

Example: [exécution d'erreur]

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

Vérification de la contrainte

Vous devez utiliser cette contrainte pour ajouter des restrictions conditionnelles pour une colonne spécifique dans une table.

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>