DB2 - Restricciones

Este capítulo describe varias restricciones en la base de datos.

Introducción

Para hacer cumplir la integridad de la base de datos, se define un conjunto de reglas, llamadas restricciones. Las restricciones permiten o prohíben los valores de las columnas.

En las actividades de una base de datos en tiempo real, los datos deben agregarse con ciertas restricciones. Por ejemplo, en una base de datos de ventas, sales-id o transaction-id deben ser únicos. Los tipos de restricciones son:

  • NO NULO
  • Unique
  • Clave primaria
  • Clave externa
  • Check
  • Informational

Las restricciones solo se asocian con tablas. Se aplican solo a tablas particulares. Se definen y aplican a la tabla en el momento de su creación.

Explicación de cada restricción:

NO NULO

Es una regla prohibir los valores nulos de una o más columnas dentro de la tabla.

Syntax:

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

Example: [Para crear una tabla de ventas, con cuatro columnas (id, itemname, qty, price) agregando restricciones "no nulas" a todas las columnas para evitar formar una celda nula en la tabla.]

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

Insertar valores NOT NULL en la tabla

Puede insertar valores en la tabla como se muestra a continuación:

Example: [ERRORoneous Query]

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

Output: [Consulta correcta]

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: [Consulta correcta]

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.

Restricciones únicas

Con estas restricciones, puede establecer valores de columnas de forma única. Para esto, las restricciones únicas se declaran con restricción "no nula" en el momento de crear la tabla.

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)

Insertar los valores en la tabla

Example: Para insertar cuatro filas diferentes con identificadores únicos como 1, 2, 3 y 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: Para insertar una nueva fila con el valor "id" 3

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

Output: cuando intente insertar una nueva fila con un valor de identificación existente, mostrará este resultado:

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

Clave primaria

De manera similar a las restricciones únicas, puede utilizar una restricción de "clave principal" y una de "clave externa" para declarar relaciones entre varias tablas.

Syntax:

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

Example: Para crear una tabla "vendedores" con "sid" como clave principal

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

Clave externa

Una clave externa es un conjunto de columnas en una tabla que deben coincidir con al menos una clave principal de una fila en otra tabla. Es una restricción referencial o una restricción de integridad referencial. Es una regla lógica sobre valores en varias columnas en una o más tablas. Permite la relación requerida entre las tablas.

Anteriormente, creó una tabla llamada "shopper.salesboys". Para esta tabla, la clave principal es "sid". Ahora está creando una nueva tabla que tiene los datos personales del vendedor con un esquema diferente llamado "empleado" y una tabla llamada "vendedores". En este caso, "sid" es la clave externa.

Syntax:

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

Example: [Para crear una tabla llamada 'salesboys' con la columna de clave externa '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: [Insertar valores en la tabla de claves principales "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: [Insertando valores en la tabla de claves externas "employee.salesboys" [sin error]]

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

Si ingresó un número desconocido, que no está almacenado en la tabla "shopper.salesboys", le mostrará un error de SQL.

Example: [ejecución de error]

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

Comprobando restricción

Debe usar esta restricción para agregar restricciones condicionales para una columna específica en una tabla.

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>