Las restricciones se utilizan para especificar reglas de datos en las tablas de una base de datos. Algunas restricciones comunes incluyen NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY y CHECK para limitar los tipos de datos y mantener la integridad referencial. Los índices se usan para recuperar datos de forma más rápida.
2. CONSTRAINTS
• Las restricciones se utilizan para limitar el tipo de datos que pueden
incluirse en una tabla. Esto asegura la precisión y confiabilidad de los
datos en la tabla. Si hay alguna violación entre la restricción y la acción
de datos, la acción se cancela.
3. CONSTRAINTS
Las restricciones pueden ser de nivel de columna o de tabla. Las restricciones a nivel de columna se
aplican a una columna y las restricciones a nivel de tabla se aplican a toda la tabla.
Las siguientes restricciones se usan comúnmente en SQL:
• NOT NULL : garantiza que una columna no pueda tener un valor NULL
• ÚNICO : garantiza que todos los valores de una columna sean diferentes
• LLAVE PRIMARIA : una combinación de NOT NULL y ÚNICO. Identifica de forma única cada fila en
una tabla
• LLAVE EXTRANJERA : identifica de forma única una fila / registro en otra tabla
• CHECK : garantiza que todos los valores de una columna satisfagan una condición específica
• DEFAULT : establece un valor predeterminado para una columna cuando no se especifica ningún
valor
• ÍNDICE : se utiliza para crear y recuperar datos de la base de datos muy rápidamente
4. RESTRICCIÓN UNIQUE
• Asegura que todos los valores de una columna sean diferentes
• Proporcionan una garantía de unicidad para una columna o conjunto de
columnas.
• Se pueden tener muchas restricciones UNIQUE por tabla
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
5. RESTRICCIÓN UNIQUE
DROP a UNIQUE Constraint
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
Crear una restricción única en una tabla existente
ALTER TABLE Person.Password ADD CONSTRAINT AK_Password UNIQUE
(PasswordHash, PasswordSalt);
6. RESTRICCIÓN DEFAULT
• Se utiliza para proporcionar un valor predeterminado para una columna.
• El valor predeterminado se agregará a todos los registros nuevos SI no
se especifica ningún otro valor.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
CREATE TABLE Orders (
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);
También se puede usar para insertar valores del
sistema, usando funciones como GETDATE ():
7. RESTRICCIÓN DEFAULT
• Para crear una restricción
DEFAULT en la columna
"Ciudad" cuando la tabla
ya está creada
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
Para eliminar una restricción DEFAULT
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
8. RESTRICCIÓN CHECK
• Se utiliza para limitar el rango de valores que se puede colocar en una
columna.
• Si define una restricción CHECK en una sola columna, solo permite
ciertos valores para esta columna.
• Si define una restricción CHECK en una tabla, puede limitar los valores
en ciertas columnas en función de los valores en otras columnas de la
fila.
9. RESTRICCIÓN CHECK
• La restricción CHECK asegura que la edad de una persona debe ser de
18 años o más:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
10. RESTRICCIÓN CHECK
• Para permitir el nombramiento de una restricción CHECK y para definir
una restricción CHECK en varias columnas, utilice la siguiente sintaxis
SQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND Ci
ty='Sandnes')
);
11. RESTRICCIÓN CHECK
• Para crear una restricción CHECK en la columna "Edad" cuando la tabla
ya está creada
ALTER TABLE Persons
ADD CHECK (Age>=18);
• Permite el nombramiento de una restricción CHECK y para definir una
restricción CHECK en varias columnas
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND
City='Sandnes');
13. CREATE INDEX
• Se utiliza para crear índices en tablas.
• Los índices se utilizan para recuperar datos de la base de datos más
rápidamente que de otra manera. Los usuarios no pueden ver los
índices, solo se utilizan para acelerar las búsquedas / consultas.
CREATE INDEX index_name
ON table_name (column1, column2, ...);
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
• Crea un índice único en una tabla. No se permiten valores duplicados:
14. CREATE INDEX
• La instrucción DROP INDEX se utiliza para eliminar un índice en una
tabla.
DROP INDEX table_name.index_name;
15. AGREGAR UNA COLUMNA CALCULADA
AL CREAR UNA TABLA
• Crea una tabla con una columna calculada
CREATE TABLE dbo.Products (
ProductID int IDENTITY (1,1) NOT NULL ,
QtyAvailable smallint ,
UnitPrice money , InventoryValue AS QtyAvailable * UnitPrice ) ;
16. COLUMNAS CALCULADAS
• Agrega una nueva columna a una tabla creada
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) ;
Opcionalmente, agregue el argumento PERSISTED para almacenar físicamente los valores
calculados en la tabla:
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5)
PERSISTED ;
17. COLUMNAS CALCULADAS
• Cambiar una columna existente a una columna calculada
ALTER TABLE dbo.Products DROP COLUMN RetailValue ;
GO
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) ;
18. ELIMINACIÓN Y ACTUALIZACIÓN EN
CASCADA
• ELIMINAR EN CASCADA: Cuando creamos una clave foránea utilizando
esta opción, elimina las filas de referencia en la tabla secundaria cuando
la fila referenciada se elimina en la tabla primaria que tiene una clave
primaria.
• ACTUALIZAR CASCADA: cuando creamos una clave externa utilizando
ACTUALIZAR CASCADA, las filas de referencia se van a actualizar en la
tabla secundaria cuando la fila referenciada se actualiza en la tabla
principal que tiene una clave primaria.
19. EJEMPLO
CREATE TABLE Countries
(CountryID INT PRIMARY KEY,
CountryName VARCHAR(50),
CountryCode VARCHAR(3))
CREATE TABLE States
(StateID INT PRIMARY KEY,
StateName VARCHAR(50),
StateCode VARCHAR(3),
CountryID INT)
ALTER TABLE [dbo].[States] WITH CHECK ADD
CONSTRAINT [FK_States_Countries] FOREIGN
KEY([CountryID])
REFERENCES [dbo].[Countries] ([CountryID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[States] CHECK CONSTRAINT
[FK_States_Countries]
GO
20. ELIMINACIÓN EN CASCADA
ALTER TABLE [dbo].[States] WITH CHECK ADD CONSTRAINT
[FK_States_Countries] FOREIGN KEY([CountryID])
REFERENCES [dbo].[Countries] ([CountryID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries]
GO
21. EJEMPLO
INSERT INTO Countries VALUES (1,'United
States','USA')
INSERT INTO Countries VALUES (2,'United
Kingdom','UK')
INSERT INTO States VALUES (1,'Texas','TX',1)
INSERT INTO States VALUES (2,'Arizona','AZ',1)
SELECT * FROM Countries
SELECT * FROM States
Eliminar una fila en la tabla primaria con CountryID = 1
que a su vez también elimina las filas en la tabla
secundaria que tiene CountryID = 1.
DELETE FROM Countries WHERE CountryID = 1
SELECT * FROM States
22. ACTUALIZAR EN CASCADA
CREATE TABLE Countries
(CountryID INT PRIMARY KEY,
CountryName VARCHAR(50),
CountryCode VARCHAR(3))
CREATE TABLE States
(StateID INT PRIMARY KEY,
StateName VARCHAR(50),
StateCode VARCHAR(3),
CountryID INT)
GO
INSERT INTO Countries VALUES (1,'United States','USA')
INSERT INTO Countries VALUES (2,'United Kingdom','UK
')
INSERT INTO States VALUES (1,'Texas','TX',1)
INSERT INTO States VALUES (2,'Arizona','AZ',1)
GO
23. ACTUALIZAR EN CASCADA
ALTER TABLE [dbo].[States] WITH CHECK ADD CONSTRAINT [FK_States_Countries] FOREIGN KEY([CountryID])
REFERENCES [dbo].[Countries] ([CountryID])
ON UPDATE CASCADE
GO
ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries]
GO
24. ACTUALIZAR EN CASCADA
Actualizar CountryID en los países para una fila que también actualice las filas de referencia en los estados de la
tabla secundaria.
UPDATE Countries SET CountryID =3 where CountryID=1
SELECT * FROM Countries
SELECT * FROM States
25. ELIMINAR Y ACTUALIZAR EN CASCADA
• Crear una clave foránea en cascada, con las reglas de actualizar y
eliminar
ALTER TABLE [dbo].[States] WITH CHECK ADD CONSTRAINT [FK_States_Coun
tries] FOREIGN KEY([CountryID])
REFERENCES [dbo].[Countries] ([CountryID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries]
GO