Syntax
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
(column [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
[ WITH ( <index_option>[ , ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ... )
| filegroup | "default" } ]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CONNECTION
( { node_table TO node_table }
[ , {node_table TO node_table }]
[ , ...n ]
)
[ ON DELETE { NO ACTION | CASCADE } ]
| DEFAULT constant_expression FOR column [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Arguments
CONSTRAINT
, , FOREIGN KEYUNIQUE또는 제약 조건 또는 CHECK 에 대한 PRIMARY KEY정의의 시작을 지정합니다DEFAULT.
제약_이름
제약 조건의 이름입니다. 제약 조건 이름은 숫자 기호(#)로 시작할 수 없다는 점을 제외하고 식별자에 대한 규칙을 따라야 합니다. 제공하지 constraint_name않으면 시스템에서 생성된 이름을 제약 조건에 할당합니다.
기본 키
고유 인덱스를 사용하여 지정된 열에 엔터티 무결성을 적용하는 제약 조건입니다. 각 테이블에 대해 하나의 PRIMARY KEY 제약 조건만 만들 수 있습니다.
UNIQUE
고유 인덱스를 사용하여 지정된 열 또는 열에 대한 엔터티 무결성을 제공하는 제약 조건입니다.
CLUSTERED | 비클러스터형
클러스터형 또는 비클러스터형 인덱스가 또는 UNIQUE 제약 조건에 대해 PRIMARY KEY 생성되도록 지정합니다.
PRIMARY KEY 제약 조건은 기본적으로 .로 설정됩니다 CLUSTERED.
UNIQUE 제약 조건은 기본적으로 .로 설정됩니다 NONCLUSTERED.
클러스터형 제약 조건 또는 인덱스가 테이블에 이미 있는 경우 지정할 CLUSTERED수 없습니다. 클러스터형 제약 조건 또는 인덱스가 테이블에 PRIMARY KEY 이미 있는 경우 제약 조건은 기본적으로 .로 설정됩니다 NONCLUSTERED.
ntext, text, varchar(max), nvarchar(max), varbinary(max), xml 또는 이미지 데이터 형식의 열을 인덱스의 열로 지정할 수 없습니다.
칼럼
새 제약 조건에서 사용하는 괄호로 지정된 열 또는 열 목록입니다.
[ ASC | [
테이블 제약 조건에 사용되는 열의 정렬 순서를 지정합니다. 기본값은 오름차순 정렬 순서(ASC)입니다.
필 팩터 = 필 팩터
데이터베이스 엔진 인덱스 데이터를 저장하는 데 사용되는 각 인덱스 페이지를 만드는 방법을 지정합니다. 사용자가 지정한 fillfactor 값은 1에서 100 사이일 수 있습니다. 값을 지정하지 않으면 기본값 0로 설정됩니다.
이전 버전과의 호환성을 위해 이 설명서에는 제약 조건에 적용되는 유일한 인덱스 PRIMARY KEYUNIQUE 옵션이 포함되어 WITH FILLFACTOR = <fillfactor> 있습니다. 이 구문은 이후 릴리스에서 문서화되지 않습니다. 의 index_option 절 ALTER TABLE에서 다른 인덱스 옵션을 지정할 수 있습니다.
ON { partition_scheme_name(partition_column_name) | 파일 그룹| "default" }
에 적용: SQL Server 2008(10.0.x) 이상 버전.
제약 조건에 대해 만들어진 인덱스의 스토리지 위치를 지정합니다.
partition_scheme_name 지정하면 인덱스가 분할되고 파티션이 partition_scheme_name 지정하는 파일 그룹에 매핑됩니다. 파일 그룹을 지정하면 명명된 파일 그룹에 인덱스가 만들어집니다.
"기본값"을 지정하거나 전혀 지정 ON 하지 않으면 인덱스가 테이블과 동일한 파일 그룹에 만들어집니다. 또는 UNIQUE 제약 조건에 대해 PRIMARY KEY 클러스터형 인덱스 추가 시기를 지정 ON 하면 클러스터형 인덱스가 만들어질 때 전체 테이블이 지정된 파일 그룹으로 이동됩니다.
이 컨텍스트에서 기본값은 키워드가 아닙니다. 기본 파일 그룹의 식별자이며 "default" 또는 ON[default]와 ON 같이 구분되어야 합니다.
"기본값"을 QUOTED_IDENTIFIER 지정하는 경우 현재 세션에 대한 옵션이어야 ON 합니다. 이 값은 기본 설정입니다.
외래 키 참조
열의 데이터에 대한 참조 무결성을 제공하는 제약 조건입니다.
FOREIGN KEY 제약 조건을 사용하려면 열의 각 값이 참조된 테이블의 지정된 열에 있어야 합니다.
referenced_table_name
제약 조건이 참조하는 테이블입니다 FOREIGN KEY .
ref_column
새 FOREIGN KEY 제약 조건에서 참조하는 괄호 안의 열 또는 열 목록입니다.
삭제 시 { 행동 없음 | 폭포 | SET NULL | 기본값 설정 }
해당 행에 참조 관계가 있고 부모 테이블에서 참조된 행을 삭제하는 경우 변경한 테이블의 행에 대해 수행되는 작업을 지정합니다. 기본값은 NO ACTION입니다.
행동 없음
SQL Server 데이터베이스 엔진 오류를 발생시키고 부모 테이블의 행에서 삭제 작업을 롤백합니다.
CASCADE
부모 테이블에서 해당 행을 삭제하면 참조 테이블에서 해당 행을 삭제합니다.
SET NULL
외래 키를 구성하는 모든 값을 부모 테이블에서 해당 행을 삭제할 NULL 때로 설정합니다. 이 제약 조건을 실행하려면 외래 키 열이 Null을 허용해야 합니다.
기본값 설정
부모 테이블에서 해당 행을 삭제할 때 외래 키를 구성하는 모든 값을 기본값으로 설정합니다. 이 제약 조건을 실행하려면 모든 외래 키 열에 기본 정의가 있어야 합니다. 열이 null 허용되고 명시적 기본값 집합 NULL 이 없는 경우 열의 암시적 기본값이 됩니다.
테이블이 논리 레코드를 사용하는 병합 게시에 포함되는지 지정 CASCADE 하지 마세요. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.
변경하려는 테이블에 트리거 ON DELETE 가 이미 있는지 INSTEAD OF 정의 ON DELETE CASCADE 할 수 없습니다.
예를 들어 AdventureWorks2025 데이터베이스에서 ProductVendor 테이블은 Vendor 테이블과 참조 관계를 갖습니다.
ProductVendor.VendorID 외래 키는 Vendor.VendorID 기본 키를 참조합니다.
Vendor 테이블의 행에서 DELETE 문을 실행하고 ProductVendor.VendorID 대해 ON DELETE CASCADE 동작을 지정하면 데이터베이스 엔진 ProductVendor 테이블에서 하나 이상의 종속 행을 확인합니다. 있는 경우 테이블의 종속 행 ProductVendor 은 테이블에서 참조되는 Vendor 행 외에 삭제됩니다.
반대로 NO ACTION 지정하면 데이터베이스 엔진 오류를 발생시키고 ProductVendor 테이블에 하나 이상의 행이 있는 경우 Vendor 행에서 삭제 작업을 롤백합니다.
업데이트 시 { 무행동 | 폭포 | SET NULL | 기본값 설정 }
해당 행에 참조 관계가 있고 부모 테이블에서 참조된 행을 업데이트할 때 변경한 테이블의 행에 대해 수행되는 작업을 지정합니다. 기본값은 NO ACTION입니다.
행동 없음
데이터베이스 엔진 오류가 발생하며 부모 테이블의 행에 대한 업데이트 작업이 롤백됩니다.
CASCADE
부모 테이블에서 행이 업데이트될 때 참조 테이블에서도 해당 행이 업데이트됩니다.
SET NULL
외래 키를 구성하는 모든 값을 부모 테이블의 해당 행을 업데이트할 NULL 때로 설정합니다. 이 제약 조건을 실행하려면 외래 키 열이 Null을 허용해야 합니다.
기본값 설정
부모 테이블에서 행을 업데이트하면 해당 외래 키를 구성하는 모든 값이 기본값으로 설정됩니다. 이 제약 조건을 실행하려면 모든 외래 키 열에 기본 정의가 있어야 합니다. 열이 nullable이고 명시적 기본값 집합 NULL 이 없는 경우 열의 암시적 기본값이 됩니다.
테이블이 논리 레코드를 사용하는 병합 게시에 포함되는지 지정 CASCADE 하지 마세요. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.
ON UPDATE CASCADE, SET NULL또는 SET DEFAULT 변경 중인 테이블에 트리거 ON UPDATE 가 이미 있는 경우 INSTEAD OF 정의할 수 없습니다.
예를 들어 AdventureWorks2025 데이터베이스에서 ProductVendor 테이블은 Vendor 테이블과 참조 관계를 갖습니다.
ProductVendor.VendorID 외래 키는 Vendor.VendorID 기본 키를 참조합니다.
Vendor 테이블의 행에서 UPDATE 문을 실행하고 ProductVendor.VendorID 대해 ON UPDATE CASCADE 작업을 지정하면 데이터베이스 엔진 ProductVendor 테이블에서 하나 이상의 종속 행을 확인합니다. 있는 경우 테이블의 종속 행 ProductVendor 과 테이블에서 참조되는 행이 업데이트됩니다 Vendor .
반대로 NO ACTION 지정하면 데이터베이스 엔진 오류를 발생시키고 ProductVendor 테이블에 하나 이상의 행이 있는 경우 Vendor 행에서 업데이트 작업을 롤백합니다.
복제용이 아님
에 적용: SQL Server 2008(10.0.x) 이상 버전.
제약 조건에 대해 이 절을 지정하는 경우 복제 에이전트는 쓰기 작업을 수행할 때 제약 조건을 적용하지 않습니다. 제약 조건 및 CHECK 제약 조건에 대해 FOREIGN KEY 이 절을 지정할 수 있습니다.
CONNECTION
지정된 에지 제약 조건이 연결할 수 있는 노드 테이블 쌍을 지정합니다.
ON DELETE 에지 연결 노드가 삭제될 때 에지 테이블의 행에 어떤 일이 발생하는지 지정합니다.
DEFAULT
열에 대한 기본값을 지정합니다. 정의를 사용하여 DEFAULT 기존 데이터 행의 새 열에 대한 값을 제공합니다.
타임스탬프 데이터 형식, 속성, IDENTITY 기존 DEFAULT 정의 또는 바인딩된 기본값이 있는 열에는 정의를 추가할 DEFAULT 수 없습니다. 열에 기존 기본값이 있는 경우 새 기본값을 추가하려면 먼저 기본값을 삭제해야 합니다. 사용자 정의 형식 열의 기본값을 지정하는 경우 이 형식은 constant_expression 사용자 정의 형식으로의 암시적 변환을 지원해야 합니다. 이전 버전의 SQL Server 호환성을 유지하려면 제약 조건 이름을 DEFAULT 할당할 수 있습니다.
constant_expression
기본 열 값으로 사용하는 리터럴 값, NULL또는 시스템 함수입니다. Microsoft .NET Framework 사용자 정의 형식으로 정의된 열과 함께 constant_expression 사용하는 경우 형식의 구현은 constant_expression에서 사용자 정의 형식으로의 암시적 변환을 지원해야 합니다.
FOR 열
테이블 수준 DEFAULT 정의와 연결된 열을 지정합니다.
값과 함께
열과
DEFAULT제약 조건을 추가할 때 열에서 nullWITH VALUES을 허용하는 경우 기존 행에 대한 새 열 값을 constant_expression 지정된DEFAULT값으로 설정합니다.추가하는 열이 null을 허용하지 않는 경우 기존 행에 대한 열 값은 항상 상수 식에
DEFAULT지정된 값으로 설정됩니다.
SQL Server 2012 이상 버전에서 이 작업은 메타데이터 작업 adding-not-null-columns-as-an-online-operation일 수 있습니다.
관련 열도 추가되지 않을 때 사용하면 WITH VALUES 아무런 효과가 없습니다.
CHECK
열에 입력 가능한 값을 제한하여 도메인 무결성을 적용하는 제약 조건입니다.
logical_expression
반환하거나 FALSE을 반환 TRUE 하는 CHECK 제약 조건에 사용되는 논리 식입니다.
제약 조건과 함께 CHECK 사용되는 logical_expression 다른 테이블을 참조할 수 없지만 동일한 행에 대해 동일한 테이블의 다른 열을 참조할 수 있습니다. 식은 별칭 데이터 형식을 참조할 수 없습니다.
Remarks
추가 FOREIGN KEY 또는 CHECK 제약 조건을 사용하면 옵션을 지정하지 않는 한 시스템에서 모든 기존 데이터에서 제약 조건 위반을 WITH NOCHECK 확인합니다. 위반이 발생하면 ALTER TABLE 실패하고 오류를 반환합니다. 기존 열에 새 PRIMARY KEY 열 또는 UNIQUE 제약 조건을 추가하는 경우 열 또는 열의 데이터는 고유해야 합니다. 중복 값이 발견 ALTER TABLE 되면 실패합니다.
WITH NOCHECK 이 옵션은 추가하거나 UNIQUE 제약 조건을 적용 PRIMARY KEY 할 때 영향을 주지 않습니다.
각 PRIMARY KEY 제약 조건과 UNIQUE 제약 조건은 인덱스를 생성합니다. 제약 조건의 UNIQUE 수로 PRIMARY KEY 인해 테이블의 인덱스 수가 999개의 비클러스터형 인덱스와 1개의 클러스터형 인덱스를 초과할 수 없습니다. 외래 키 제약 조건은 인덱스를 자동으로 생성하지 않습니다. 그러나 한 테이블의 외래 키 제약 조건의 열 또는 열을 다른 테이블의 기본 또는 고유 키 열과 일치시켜 쿼리의 조인 조건에서 외래 키 열을 자주 사용합니다. 외래 키 열의 인덱스를 사용하면 데이터베이스 엔진 외래 키 테이블에서 관련 데이터를 빠르게 찾을 수 있습니다.
SQL Server 2022(16.x) 이상 버전에서 다시 시작 가능한 작업은 기본 키 및 고유 키 제약 조건에 대한 테이블 제약 조건 추가를 지원합니다. 다시 시작할 수 있는 ALTER TABLE ADD CONSTRAINT 작업을 사용하도록 설정하고 사용하는 방법에 대한 자세한 내용은 다시 시작할 수 있는 추가 테이블 제약 조건을 참조하세요.
Microsoft Fabric 웨어하우스는 ADD 또는 DROPPRIMARY KEY, UNIQUE 및 FOREIGN_KEY 열 제약 조건을 지원하지만 NOT ENFORCED 옵션을 지정하는 경우에만 지원합니다. Microsoft Fabric 웨어하우스는 다른 모든 ALTER TABLE 작업을 차단합니다.
Examples
예제는 ALTER TABLE(Transact-SQL) 참조하세요.