miércoles, 4 de febrero de 2009

Restricción CHECK

USO CHECK: Restringir los valores que puede tomar un campo en concreto de la tabla.

Ejemplos:
check (id between 1 and 20) : Que el id solo pueda tomar valores entre 1 y 20
check (turno in ('Mañanas','Tardes')): Que el campo turno solo pueda tomar valores Mañanas o Tardes.

Ejemplo práctico POSTGRESQL:

#Creamos una tabla
postgres=# create table prucheck(
postgres(# id bigint,
postgres(# nombre varchar(20),
postgres(# check (id between 1 and 20),
postgres(# check (nombre in ('Lunes','Martes')));
CREATE TABLE

Probamos a insertar valores válidos
postgres=# insert into prucheck (id, nombre) values (1,'Lunes');
INSERT 29781 1

Probamos a insertar valores no válidos
postgres=# insert into prucheck (id, nombre) values (21,'Martes');
ERROR: el nuevo registro para la relación "prucheck" viola la restricción check "$1"

Ejemplo práctico MYSQL:
CREATE TABLE `tablacheck3` (
`id` INT NOT NULL,
`semana` VARCHAR(20) NOT NULL,
check (id between 1 and 20),
check (semana in ('Lunes','Martes'))
)
ENGINE = myisam;

PERO NO FUNCIONA EL CHECK--> deja insertar valores que no cumplen la restricción.

INSERT INTO `tablacheck3` ( `id` , `semana` )
VALUES (
'1', '''Lunes'''
), (
'221', '''hola'''
);


ANOTACIÓN: Esta probado bajo myisam, posiblemente con innodb si que se cumpla la restricción.
palyginti kainas