2012-03-04 23 views
6

Cuando estoy añadiendo algunas limitaciones, como por ejemplo:SQL redundante NOT NULL restricción

create table Test(
    IDTest int primary key, 
    Credit int not null constraint Credit check (Credit >= 0) 
); 

En este caso no es el not null en Credit redundante, ya que estoy añadiendo una restricción que Credit debe ser mayor que 0 ?

+3

Aviso: algunos (MySQL ...) motores de SQL ignoran silenciosamente la restricción 'CHECK'. – biziclop

Respuesta

8

No, no es redundante.

A CHECK restricción acepta un valor si la condición no es FALSE, por lo que si es TRUE o UNKNOWN.

Si permite Nulos en su columna, entonces NULL >= 0 evaluará a UNKNOWN y pasará la prueba.

+0

Gracias, tiene todo el sentido :) – RSort

+0

@RSort: Considere la alternativa: si fuera un requisito que la condición tuviera que ser VERDADERA, cada restricción que implique columnas con nulos debería probar explícitamente los nulos y eso sería una gran cantidad de ruido y dolor! – onedaywhen

Cuestiones relacionadas