Default
- Se aplica para INSERT
- Solo una por columna
- No se pueden utilizar con IDENTITY
- Permite especificar valores proporcionados por el sistema
Sintaxis parcial
[ constraint nombre_restricción ] default expresión
Ejemplo
alter table Producto
add constraint DF_Descripcion default 'No especifica'
for Descripcion
Check
- Para sentencias Insert y Update
- Pueden hacer referencias a columnas en la misma tabla
- No pueden contener subconsultas
Sintaxis parcial
[Constraint nombrerestriccion) check ( Expresion )
Ejemplo
alter table Producto
add constraint CHK_Stock Check(Stock > -1)
Primary key
- Sólo una por tabla
- Valores exclusivos
- No se permiten valores nulos
- Crea un índice exclusivo en las columnas especificadas (Predet. --> CLUSTERED )
Sintaxis parcial
[Constraint nombrerestriccion] primary key [Clustered | NonClustered ] columnas
Ejemplo
alter table Producto add constraint Pk_Codigo primary key nonclustered (codigo)
Unique
- Permite un valor nulo
- Permite varias en una tabla
- Formadas por una o mas columnas
- Exigida con un índice único
Sintaxis parcial
[Constraint nombreRestriccion ] Unique [Clustered | non Clustered ] (Columnas,...)
Ejemplo
alter table Producto add constraint U_Nombre Unique Nonclustered (Nombre)
Foreign key
- Deben hacer referencia a PRIMARY KEY o UNIQUE
- Proporcionan integridad referencial de una o varias columnas
- No crean índices automáticamente
- Permisos SELECT o REFERENCES
Sintaxis parcial
[Constraint nombreRest ] Foreign key (Columna,...) References tablaRef (Columna,…)
Ejemplo
alter table Producto add Constraint Fk_Pro_Cat Foreign Key (CategoriaID) References Categoria(CategoriaID)
"Realizo una referencia a la tabla Categoria y el campo CategoriaID para crear una restricción que solamente me permita insertar Productos que esten en una Categoria de la tabla Categoria"
Característica orientada a las claves externas
- Integridad referencial en cascada
Sintaxis parcial
[Constraint NombreRestriccion) [Foreign Key ] (Columna) References TablaRef (Columnas,…)
[On Delete {Cascade | No Action}]
[On Update {Cascade | No Action}]
NO Action es la predeterminada
Dadas las tablas y columnas
-Products
PK ProductId
-Orders
PK OrderId
FK ProductId
Con cascade si borras, borrara lo que este asociado a ella en la otra tabla, pero con No Action no te dejara borrarlo ya que esta asociado a otra tabla la cual tiene la clave principal.
Con cascade puedes borrar ProductId de products , lo cual borrara productId de orders, con No Action no lo podras borrar.
Ejemplo
alter table Producto
add Constraint Fk_Pro_Cat Foreign Key (CategoriaID) References Categoria (CategoriaID)
On delete Cascade
On update Cascade
Con estas dos instrucciones al final de la restricción le estoy diciendo que borre todos los productos de una categoria si dicha categoria es eliminado de la tabla Categoria. Lo mismo sucederá al modificar.
- Deshabilitacion de restricciones
Deshabilitación para la comprobación de los datos existentes o Aplicable a Check y Foreign Key o Utilizar la opción With NoCheck
Sintaxis parcial
Alter Table [With Check | With NoCheck]
Add Constrain restriccion { Foreign key (Columna,…)
References TablaRef (Columna,…) { Check (Condicion)}
- Restricción de una tabla consigo misma
alter table employees
with NoCheck add Constraint Fk_employees_employees
Foreign Key (ReportsTo) References employees(EmployeeId)
alter table emp2
with NoCheck add Constraint FK_Emp_Dir
Foreign Key (Dir) References emp2(Emp_no)
- Deshabilitación al cargar nuevos datos
Los datos verifican la restricción
Datos que no cumplen la restricción pero que se quieren guardar en la tabla
Sintaxis parcial
Alter Table tabla {Check | NoCheck }
Constraint {All | Restricción 1, … } => Para hacer la restriccion a todo , o a sólo lo que está separado por comas “,”
- Deshabilita la restricción hecha antes
alter table employees NoCheck Constraint Fk_Employees_Employees
Con esto introduces los datos y vuelves a habilitar la restricción
Solamente en restricciones de tipo Check y Foreign Key
No hay comentarios:
Publicar un comentario