본문 바로가기
Programming/DB (SQL)

[SQL Server] Chapter 06. 테이블의 제약 조건 생성과 사용

by 곰네Zip 2014. 12. 5.

* 본 포스팅은 개인의 학습 내용을 정리한 것입니다.

 

1. 개체 식별자 규칙

 식별자 규칙은 앞에서 언급하였다. http://gomnezip.tistory.com/345

 

2. 영구 테이블과 임시테이블, 테이블 변수

 - 영구테이블 : 일반적으로 지정하는 테이블. DB의 디스크 공간에 테이블이 기록된다.

 - 임시테이블 : 임시적으로 만들어짐. 로컬임시(해당세션에서만 사용), 전역임시(다른세션에서도 사용)로 구분된다. 세션이 종료되거나 drop table로 제거 가능하다.

 - 테이블 변수는 하나의 세션 중에서도 하나의 배치 안에서만 유효하다.

 

 

4. 테이블 생성

 - 테이블 생성 쿼리는 아래와 같다. 

 CREATE TABLE [DB명.][소유자.] <테이블명> (

    <컬럼명> <데이터형식> [[DEFAULT <표현식>] |[IDENTITY[(초기값,증가값) [NOT FOR REPLICATION]]]

        [ROWGUIDCOL] [ COLLATE <정렬이름>] [NULL | NOT NULL]

        [ [<컬럼제약조건들>]|[컬럼명 AS 표현식]|[테이블제약 조건들]] [,...N])

   [ON { <파일그룹> | DEFAULT] [TEXTIMAGE_ON{ <파일그룹> | DEFAULT } ]

  (1) ON {파일그룹 | DEFAULT}

    파일 그룹을 지정한다. 가령 테이블이 많을 경우, 하나의 파일 그룹이 아닌 다른 파일그룹에 나누어 함께 조회한다면 성능의 향상을 노려볼 수 있다.

  (2) NOT FOR REPLICATION

   복사를 통하여 삽입되는 자료에 대해 열 값을 증가하지 않는다.

  (3) ROWGUIDCOL : uniqueidentifier에서만 사용 가능하다. 

 (4) CONSTRAINT : 제약조건을 정의. PRIMARY/FOREIGN/UNIQUE KEY, CHECK등의 제약조건을 정의한다.

 

5. IDENTITY속성 및 @@IDENTITY, IDENTITY()함수 사용

 - IDENTITY속성이 걸린 컬럼은 데이터 추가시마다 값이 증가/감소한다. IDENTITY속성을 이용하여 초기값과 증가값을 설정할 수 있다. 마지막으로 증가된 IDENTITY값은 @@IDENTITY를 이용하여 얻을 수 있다.

 

 

6. 계산된 컬럼의 사용

 - 계산된 컬럼은 쿼리의 선택목록, WHERE, ORDER BY절에 사용될 수 있으나 다음과 같은 경우는 예외.

 (1) DEFAULT또는 FOREIGN KEY제약 조건을 정의할 수 없다.

 (2) 계산된 컬럼값이 명확한 식에 의해 정의된 경우는 인덱스의 키 컬럼이나 primary key또는 unique제약조건의 일부로 사용 가능하다.

 (3) 계산된 컬럼은 insert나 update문의 대상이 될 수 없다.

 (4) 계산된 컬럼의 null여부는 SQL Server에 의해 결정된다.

 (5) 계산된 컬럼에 인덱스를 생성하고 사용하기 위해서는 T-SQL문이 생성하는 결과에 영향을 미치는 SET옵션은 인덱스를 참조하는 모든 작업에 대해 같게 설정되어야 한다.

 

7. CHECKSUM집계함수 사용

 - CHECKSUM은 인수들의 목록에 대한 해시값을 계산한다. 이 해시값을 이용하여 큰 문자열에 비교를 수행하거나 행,컬럼의 변경 유무를 확인할 수 있다. 하지만 해시값의 경우 같은지 여부를 판단하는데 사용하여야 한다.  아닐 경우 원하지 않는 결과를 얻게 된다.

 

8. 테이블 수정

 - ALTER TABLE을 이용하여 테이블의 내용을 수정할 수 있다.

 (1) 컬럼의 추가와 삭제, 변경

   - 컬럼을 추가할 때, 테이블에 이미 데이터가 있다면, null을 허용하거나 DEFAULT값을 지정해 주어야 한다.

   - 컬럼을 변경할 떄에는 기존 데이터형이 신규 데이터형과 묵시적 형 변환이 가능해야 한다. 아니면 오류

   - ROWGUIDCOL속성을 가지거나, text,image,ntext,timestamp형식의 열, 계산된컬럼이나 그에 사용된 열, 복제에 참여하는 컬럼, 인덱스에 사용된 컬럼, 제약조건에 사용된 컬럼, CREATE STATISTICS문으로 생성된 통계에 쓰인 컬럼은 변경을 할 수 없다.

 

 (2) 트리거 비활성화 하기 

 ALTER TABLE <테이블명> {DISABLE | ENABLE} TRIGGER {<트리거명>|ALL}

 위 구문을 이용하여 트리거를 활성화/비활성화 할 수 있다.

 

9. 테이블 삭제

 - 테이블을 삭제하는 구문은 DROP이다. 

 DROP TABLE <테이블명>

 - 삭제될 테이블이 참조되고 있는지 확인하기 위해서는 sp_depends프로시저를 사용하여 확인할 수 있다.

 

10. 제약조건

 - DB의 주요 기능중 하나는 데이터 무결성을 유지하는 것이다. 이를 통해 일관된 자료를 유지할 수 있다.

 (1) 무결성의 구분 

 무결성 종류

 설명 

 제약조건 

 도메인무결성

 특정한 범위 값만 허용하거나 기본값을 삽입

 CHECK, DEFAULT

 엔티티무결성

 행의 고유한 대표값을 유지

 PRIMARY KEY, UNIQUE

 참조무결성

 테이블간이나 테이블 내의 참조관계를 유지

 FOREIGN KEY, CHECK

 

 (2) 제약 조건의 생성과 삭제 방법

  - 신규 테이블 생성 시에는 각 컬럼에 제약조건을 추가하면 된다. 하지만, 기존 테이블에 추가/삭제하는 경우는 아래 구문을 사용해야 한다. 

 추가>

 ALTER TABLE <테이블명> ADD CONSTRAINT <컬럼명> <추가할 조건>

 삭제>

 ALTER TABLE <테이블명> DROP CONSTRAINT <컬럼명>

 

 (3) 제약조건의 종류 

 제약종류

 설명

 범위

 적용시점

 가능한수

 NoCheck

 DEFAULT

 INSERT시 명시되지 않은 컬럼이면 DEFAULT값이 대입됨

 컬럼

 INSERT

 1

 X

 CHECK

 정한 범위 값만 허락

 컬럼, 테이블내 다른컬럼 참조

 INSERT

 UPDATE

 N

 O

 PRIMARY

 KEY

 행의 고유한 대표값 유지. NOT NULL

 컬럼, 여러컬럼

 INSERT

 UPDATE

 1

 X

 UNIQUE

 행의 고유한 대표값 유지. NULL

 컬럼, 여러컬럼

 INSERT

 UPDATE

 N

 X

 FOREIGN

 KEY

 PRIMARY KEY, UNIQUE Constraints를 참조하여 테이블간의 참조 관계를 유지

 테이블간 컬럼,

 여러컬럼

 INSERT

 UPDATE

 DELETE

 N

 O

 

 (4) NOCHECK옵션 : 제약사항에 벗어나는 데이터에 대해 무시하고 만들거나 삽입할 수 있게 함

 

출처 [SQL Server advanced programming]

반응형

댓글