* 본 포스팅은 개인의 학습 내용을 정리한 것입니다.
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]
댓글