DB2 - restrições

Este capítulo descreve várias restrições no banco de dados.

Introdução

Para impor a integridade do banco de dados, um conjunto de regras é definido, chamado de restrições. As restrições permitem ou proíbem os valores nas colunas.

Em atividades de banco de dados em tempo real, os dados devem ser adicionados com certas restrições. Por exemplo, em um banco de dados de vendas, sales-id ou transaction-id deve ser único. Os tipos de restrições são:

  • NÃO NULO
  • Unique
  • Chave primária
  • Chave Estrangeira
  • Check
  • Informational

As restrições estão associadas apenas a tabelas. Eles são aplicados apenas a tabelas específicas. Eles são definidos e aplicados à mesa no momento de sua criação.

Explicação de cada restrição:

NÃO NULO

É uma regra proibir valores nulos de uma ou mais colunas da tabela.

Syntax:

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

Example: [Para criar uma tabela de vendas, com quatro colunas (id, itemname, qty, preço) adicionando restrições "não nulas" a todas as colunas para evitar a formação de qualquer célula nula na tabela.]

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

Inserindo valores NOT NULL na tabela

Você pode inserir valores na tabela conforme mostrado abaixo:

Example: [Consulta ERRÔNEA]

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

Output: [Consulta correta]

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 correta]

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.

Restrições únicas

Usando essas restrições, você pode definir valores de colunas exclusivamente. Para isso, as restrições únicas são declaradas com restrição “não nula” no momento da criação da tabela.

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)

Inserindo os valores na tabela

Example: Para inserir quatro linhas diferentes com ids exclusivos como 1, 2, 3 e 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 inserir uma nova linha com valor “id” 3

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

Output: quando você tenta inserir uma nova linha com o valor de id existente, ele 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

Chave primária

Semelhante às restrições exclusivas, você pode usar uma restrição de “chave primária” e uma “chave estrangeira” para declarar relacionamentos entre várias tabelas.

Syntax:

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

Example: Para criar a tabela 'vendedores' com “sid” como chave primária

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

Chave estrangeira

Uma chave estrangeira é um conjunto de colunas em uma tabela que devem corresponder a pelo menos uma chave primária de uma linha em outra tabela. É uma restrição referencial ou restrição de integridade referencial. É uma regra lógica sobre valores em várias colunas em uma ou mais tabelas. Ele permite o relacionamento necessário entre as tabelas.

Anteriormente, você criou uma tabela chamada “shopper.salesboys”. Para esta tabela, a chave primária é “sid”. Agora você está criando uma nova tabela que contém os detalhes pessoais do vendedor com um esquema diferente denominado “funcionário” e uma tabela denominada “vendedores”. Nesse caso, “sid” é a chave estrangeira.

Syntax:

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

Example: [Para criar uma tabela chamada 'vendedores' com a coluna de chave estrangeira '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: [Inserindo valores na tabela de chave primária “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: [Inserindo valores na tabela de chave estrangeira “employee.salesboys” [sem erro]]

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

Se você inseriu um número desconhecido, que não está armazenado na tabela “shopper.salesboys”, ele mostrará o erro de SQL.

Example: [execução de erro]

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

Verificando restrição

Você precisa usar esta restrição para adicionar restrições condicionais para uma coluna específica em uma tabela.

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>