La restricción "check" especifica los valores que acepta un campo, evitando que se ingresen valores inapropiados cuando ejecutamos un comando insert o update.
Definimos la restricción "check" cuando creamos la tabla:
create table libros( codigo integer primary key, titulo text, autor text, editorial text, precio real check(precio >= 0) );
Definimos la restricción para el campo precio indicando que el valor a almacenar no puede ser negativo:
precio real check(precio >= 0)
Luego si efectuamos un insert y tratamos de insertar un valor negativo para el campo precio:
insert into libros (titulo, autor, editorial, precio)
values('El aleph', 'Borges', 'Emece', -100);
CHECK constraint failed: libros:
insert into libros (titulo, autor, editorial, precio)
values('El aleph', 'Borges', 'Emece', -100);
La inserción no se efectúa ya que no se cumple la restricción para el campo precio.
Si tenemos la tabla "visitantes" y queremos restringir el campo "sexo" para permitir ingresar solo los caractes "m" o "f" luego podemos definir la siguiente restricción:
create table visitantes(
codigo integer primary key,
nombre text,
edad integer,
sexo text check(sexo in ('m','f')),
domicilio text,
ciudad text,
telefono text,
mail text,
montocompra real
);
Si intentamos ingresar un valor no válido para el campo "sexo" luego se genera un error y no se produce la carga:
insert into visitantes(nombre, edad, sexo, domicilio, ciudad, telefono, mail, montocompra)
values ('Marcos Molina',35,'x','Colon 123','Carlos Paz','32322122',null,59.80);
Tenemos como resultado:
CHECK constraint failed: visitantes:
insert into visitantes(nombre, edad, sexo, domicilio, ciudad, telefono, mail, montocompra)
values ('Marcos Molina',35,'x','Colon 123','Carlos Paz','32322122',null,59.80);
Si se permite que se ingrese el valor null:
insert into visitantes(nombre, edad, sexo, domicilio, ciudad, telefono, mail, montocompra)
values ('Marcos Molina',35,null,'Colon 123','Carlos Paz','32322122',null,59.80);
A menor que definamos el campo de tipo not null:
create table visitantes(
codigo integer primary key,
nombre text,
edad integer,
sexo text not null check(sexo in ('m','f')),
domicilio text,
ciudad text,
telefono text,
mail text,
montocompra real
);
NOT NULL constraint failed: visitantes.sexo:
insert into visitantes(nombre, edad, sexo, domicilio, ciudad, telefono, mail, montocompra)
values ('Marcos Molina',35,null,'Colon 123','Carlos Paz','32322122',null,59.80);
Trabajar con la tabla "autos" y definir restricciones para los campos "patente", "modelo" y "precio".
Eliminamos la tabla "autos" si existe:
drop table if exists autos;
Creamos la tabla "autos" con las restricciones respectivas:
create table autos(
patente text primary key check(patente regexp '^[A-Z]{2}[0-9]{3}[A-Z]{2}$'),
marca text,
modelo integer check(modelo>1900),
precio real check(precio>0)
);
Definimos una expresión regular para el campo patente obligando la carga de dos letras, 3 números y finalmente 2 letras.
Intentemos de cargar una patente incorrecta:
insert into autos(patente, marca, modelo, precio)
values('123', 'Fiat 128', 1970, 15000);
Luego no se efectúa el insert:
CHECK constraint failed: autos:
insert into autos(patente, marca, modelo, precio)
values('123', 'Fiat 128', 1970, 15000);
Ahora si carguemos una patente válida:
insert into autos(patente, marca, modelo, precio)
values('AC123FG', 'Fiat 128', 1970, 15000);
Ahora sí obtenemos un resultado positivo:
Consulta ejecutada con éxito: insert into autos(patente, marca, modelo, precio)
values('AC123FG', 'Fiat 128', 1970, 15000); (tardó 0ms, 1 líneas afectadas)
Carguemos un valor incorrecto para el modelo:
insert into autos(patente, marca, modelo, precio)
values('AC123FG', 'Fiat 128', 1500, 15000);
Se obtiene como resultado:
CHECK constraint failed: autos:
insert into autos(patente, marca, modelo, precio)
values('AC123FG', 'Fiat 128', 1500, 15000);
Puede ejecutar comandos de SQLite directamente en el sitio sin tener que instalar nada en su computadora.