SQL supports following constraints:
CHECK
- Ensures that the value in a column meets a specific condition
DEFAULT
- Specifies a default value when specified none for this column
NOT NULL
- Indicates that a column cannot store NULL value
FOREIGN KEY
- Ensure the referential integrity of the data in one table to match values in another table
PRIMARY KEY
- A combination of a NOT NULL and UNIQUE. Ensures that a column (or combination of two or more columns) have an unique identity which helps to find a particular record in a table more easily and quickly
UNIQUE
- Ensures that each row for a column must have a unique value
Starting with an example of having named constraint in CREATE
statement.
CREATE TABLE [dbo].[Bar]
(
[Id] int CONSTRAINT [CO_Bar_Id_NOTNULL] NOT NULL, -- PRIMARY KEY,
[Name] NVARCHAR(50) -- CONSTRAINT [CO_Bar_Name_NOTNULL] NOT NULL UNIQUE,
--CONSTRAINT [PK_Bar_Id] PRIMARY KEY ([Id]), -- named constraint
CONSTRAINT [CO_Bar_Name_UNIQUE] UNIQUE ([Name]),
)
GO
CREATE TABLE [dbo].[FooType]
(
[Id] int CONSTRAINT [CO_FooType_Id_NOTNULL] NOT NULL, -- PRIMARY KEY,
[Name] NVARCHAR(50) CONSTRAINT [CO_FooType_Name_NOTNULL] NOT NULL UNIQUE,
CONSTRAINT [PK_FooType_Id] PRIMARY KEY ([Id]), -- named constraint
)
GO
CREATE TABLE [dbo].[Foo]
(
[Id] int CONSTRAINT [CO_Foo_Id_NOTNULL] NOT NULL,
[Name] NVARCHAR(50) CONSTRAINT [CO_Foo_Name_NOTNULL] NOT NULL,
[Description] NVARCHAR(max) NULL,
[LinkedBarId] int CONSTRAINT [CO_Foo_LinkedBarId_NOTNULL] NOT NULL,
[TypeId] int, -- CONSTRAINT [CO_Foo_TypeId_NOTNULL] NOT NULL,
CONSTRAINT [PK_Foo] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Foo_TypeId]
FOREIGN KEY ([TypeId])
REFERENCES [dbo].[FooType] ([Id])
ON DELETE CASCADE
ON UPDATE CASCADE,
--CONSTRAINT [FK_Foo_LinkedBarId] -- named FOREIGN KEY constraint
--FOREIGN KEY ([LinkedBarId])
--REFERENCES [dbo].[Bar] ([Id])
-- ON DELETE CASCADE
-- ON UPDATE CASCADE,
)
GO
Separated from CREATE
statement/batch, a constraint can be added in ALTER
statement.
ALTER TABLE [dbo].[Bar]
ADD CONSTRAINT [PK_Bar_Id] PRIMARY KEY ([Id])
GO
ALTER TABLE [dbo].[Bar]
ADD CONSTRAINT [CO_Bar_Name_NOTNULL] -- named NOT NULL constraint
CHECK([Name] is NOT NULL)
GO
ALTER TABLE [dbo].[Foo]
ADD CONSTRAINT [DF_Foo_Description_NA] -- named DEFAULT constraint
DEFAULT ('N/A') FOR [Description]
GO
ALTER TABLE [dbo].[Foo]
ADD CONSTRAINT [CO_Foo_TypeId_NOTNULL] -- named NOT NULL constraint
CHECK([TypeId] is NOT NULL)
GO
ALTER TABLE [dbo].[Foo]
ADD CONSTRAINT [FK_Foo_LinkedBarId] -- named FOREIGN KEY constraint
FOREIGN KEY ([LinkedBarId])
REFERENCES [dbo].[Bar] ([Id])
ON DELETE CASCADE
ON UPDATE CASCADE
GO
The following query provides a view of all constraints in a database.
SELECT
db_name() AS DbName,
sys_table.name as TableName,
user_name(sys_column.uid) as SchemaName,
sys_column.name as ConstraintName,
col.name as ColumnName,
col.colid as OrdinalPosition,
comments.text as DefaultClause
FROM sysobjects sys_column
JOIN syscomments comments ON sys_column.id = comments.id
JOIN sysobjects sys_table ON sys_column.parent_obj = sys_table.id
JOIN sysconstraints con ON sys_column.id = con.constid
JOIN syscolumns col ON sys_table.id = col.id AND con.colid = col.colid
WHERE sys_column.uid = user_id() AND sys_column.xtype = 'D'
GO
See more at W3resource | Wiki.