MS-SQL > Data Integrity - Constraints
등록일 : 2017-07-03 19:32
조회수 : 92,548
오늘의 동물 뉴스 입니다.
--------------------------------------------------------------------------------
족제비들이 집회를 열고 대대적인 반모피운동을 벌였습니다.
집회 후에는, 자선 바자회를 열고 뱀 허리띠와 악어 가죽구두 밍크코트 등을 팔아 수익금 전액을
'족제비 보호를 위해 써달라'며 환경단체에 기부했습니다.
이에 환경단체는 감사패를 전달하고 부족한 자금은 족제비를 잡아 충당하겠다고 약속 했습니다
--------------------------------------------------------------------------------
안녕하세요.... 귀염둥이 안규랍니다.
저번 시간에는 개념에 대해서 간단히 알아보았지여????
혹시 잘 이해가 가지 않으시면,, 다시 천천히 읽어 보세요. 기본이 중요한건 알고 계시지요?
Constraints 라는것은 우리말로 제약 조건이라고 부른답니다. ANSI 표준의 데이타 무결성 방법중
하나이지요.
이 페이지에서는 Contraints를 어떻게 정의하며 정의시 고려할 사항들에는 무엇이 있는가를
살펴 보고자 합니다.
여러분이 사용하시는 MS_SQL서버에서는 Constraints 방법은 디폴트,체크,프라이머리 키, 유니크,
포린키 등이 있는데여.. 이런것들은 차후 실무위주로 자세히 다루어 보고자 합니다.
Constraints를 정의하기 위해서는 CREATE TABLE 또는 ALTER TABLE 문을 사용하며 적용컬럼의
수나 선언 방법에 따라서 Constraints와 테이블 Constraints로 구분이 됩니다.
1. CREATE TABLE 문에서 Constraints의 정의
CREATE TABLE table_name
(
{ [{column_name data_type}[]][,...n]
|
}[,...n]
)
::[CONSTRAINT constraint_name]
{
[NULL | NOT NULL]
[DEFAULT constant_expression]
| [ {PRIMARY KEY | UNIQUE}
[CLUSTERED | NONCLUSTERED]
[WITH FILLAFACTOR=fillfactor]
[ON {filegroup | DEFAULT}]]
]
| [ [FOREIGN KEY]
REFERENCES ref_table[(ref_column)]
[NOT FOR REPLICATION]
]
| CHECK [NOT FOR REPLICATION]
(logical_expression)
}
::[CONSTRAINT constraint_name]
{
[ {PRIMARY KEY | UNIQUE}
[ CLUSTERED | NONCLUSTERED]
{(column[,..n])}
[WITH FILLFACTOR=fillfactor]
[ON {FILLEGROUP | DEFAULT}]
]
| FOREIGN KEY
[(column[,....n])]
REFERENCES ref_table[(ref_column[,..])]
[NOT FOR REPLICATION]
| CHECK [NOT FOR REPLICATION]
(search_conditions)
}
컬럼 Constraints와 테이블 Constraints는 거의 같으며 아래와 같이 구분이 될수 있습니다.
1) 컬럼 제약은 하나의 컬럼에 대해서만 적용되는 제약을 정희할때 사용하므로 컬럼의
정의 뒤에 곧바로 선언하며, null값 허용여부, default,와 같은 제약과 함께 정의됩니다.
2) 테이블 제약은 주로 하나 이상의 컬럼에 대해서 적용되는 제약입니다. 특정 컬럼과
독립적으로 정의되므로 반드시 제약이 적용되는 컬럼을 괄호를 쳐서 명시해야 합니다.
위의 문법은 어케 보면 무쟈게 복잡하게 되어 있지만, 여러분이 자세히 보면 그리 어렵지 않고
각 종류별 Constraints의 사용법을 익히게 되면 아주 쉽게 응용할 수 있습니다.
2. ALTER TABLE 문에서 Constraints의 정의
ALTER TABLE table
{
| ADD { column_name data_type []}[,...n]
| [WITH CHECK | WITH NOCHECK] ADD
{}[,...n]
| DROP
{[CONSTRAINT] constraint_name}[,..n]
| {CHECK | NOCHECK} CONSTRAINT
{ALL | constraint_name[,...n]}
}
(
::[CONSTRAINT constraint_name]
{
[NULL | NOT NULL]
[DEFAULT constant_expression]
| [ {PRIMARY KEY | UNIQUE}
[CLUSTERED | NONCLUSTERED]
[WITH FILLAFACTOR=fillfactor]
[ON {filegroup | DEFAULT}]]
]
| [ [FOREIGN KEY]
REFERENCES ref_table[(ref_column)]
[NOT FOR REPLICATION]
]
| CHECK [NOT FOR REPLICATION]
(logical_expression)
}
::[CONSTRAINT constraint_name]
{
[ {PRIMARY KEY | UNIQUE}
[ CLUSTERED | NONCLUSTERED]
{(column[,..n])}
[WITH FILLFACTOR=fillfactor]
[ON {FILLEGROUP | DEFAULT}]
]
| FOREIGN KEY
[(column[,....n])]
REFERENCES ref_table[(ref_column[,..])]
[NOT FOR REPLICATION]
| CHECK [NOT FOR REPLICATION]
(logical_expression)
}
위의 문법은 ALTER TABLE문을 사용하여 Constraints를 정의할때 사용되는 문법입니다.
아래의 사항을 고려하기만 하면 됩니다.
1) ALTER TABLE 문을 사용하면 테이블을 변경하지 않고 Constraints를 추가하거나
변경,제거할수 있습니다.
2) 제약을 추가할때는 제약의 이름을 명시하는것이 좋습니다. 그렇게 하지 않으면
SQL 서버에서 Constraints를 추가할때마다 종류에 따라서 중복되지 않게끔 일변번호
를 붙여서 이름을 만들게 되는데 나중에는 알아보기 힘들어 진답니다.
오늘은 간단히 문법만을 집고 넘어 갔구요... 다음시간부터는 실제로 하나 하나 테스트
한 결과과 함께 직접 같이 해 보면서 익히는 걸루 진행해 나가야 할듯합니다.
오늘 ,, 많이 덮당,,, 그쳐??? 머리 아프게 여기까지 읽어 주셔서 너무 감사 하구여.... 건강하세요....