기존 답변이 다소 얇기 때문에 세부 정보를 추가하고 싶습니다 .
가장 중요한 힌트는 다음과 같습니다. 명시적인 이름없이 제약 조건을 만들면 안됩니다!
명명되지 않은 제약 조건의 가장 큰 문제 : 다양한 고객 컴퓨터에서이를 실행할 때 각기 다른 / 임의의 이름 이 표시됩니다.
모든 미래 업그레이드 스크립트는 진짜 두통이 될 것입니다 ...
일반적인 조언은 다음과 같습니다.
- 이름이없는 제약은 없습니다!
- 몇 가지 명명 규칙을 사용하십시오.
DF_TableName_ColumnName
기본 제약 조건
CK_TableName_ColumnName
점검 제한 조건
UQ_TableName_ColumnName
독특한 제약
PK_TableName
기본 키 제약 조건
일반적인 구문은
TheColumn <DataType> Nullability CONSTRAINT ConstraintName <ConstraintType> <ConstraintDetails>
여기에 이것을보십시오
각 열에 제약 조건을 더 추가 할 수 있으며 쉼표 뒤에 열을 추가하는 것처럼 추가 제약 조건을 추가 할 수 있습니다.
CREATE TABLE dbo.SomeOtherTable(TheIdThere INT NOT NULL CONSTRAINT PK_SomeOtherTable PRIMARY KEY)
GO
CREATE TABLE dbo.TestTable
(
--define the primary key
ID INT IDENTITY NOT NULL CONSTRAINT PK_TestTable PRIMARY KEY
--let the string be unique (results in a unique index implicitly)
,SomeUniqueString VARCHAR(100) NOT NULL CONSTRAINT UQ_TestTable_SomeUniqueString UNIQUE
--define two constraints, one for a default value and one for a value check
,SomeNumber INT NULL CONSTRAINT DF_TestTable_SomeNumber DEFAULT (0)
CONSTRAINT CK_TestTable_SomeNumber_gt100 CHECK(SomeNumber>100)
--add a foreign key constraint
,SomeFK INT NOT NULL CONSTRAINT FK_TestTable_SomeFK FOREIGN KEY REFERENCES dbo.SomeOtherTable(TheIdThere)
--add a constraint for two columns separately
,CONSTRAINT UQ_TestTable_StringAndNumber UNIQUE(SomeFK,SomeNumber)
);
GO
-일부 데이터 삽입
INSERT INTO dbo.SomeOtherTable VALUES(1);
INSERT INTO dbo.TestTable(SomeUniqueString,SomeNumber,SomeFK) VALUES('hello',111,1);
GO
INSERT INTO dbo.TestTable(SomeUniqueString,SomeNumber,SomeFK)
VALUES('fails due to uniqueness of 111,1',111,1);