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>