인용하는 그림은 다양한 곳에서 가져왔음을 밝힙니다
Ch 6. 테이블 관리
Section 1. 테이블 생성
1.1 데이터 형식을 사용한 테이블 정의
CREATE TABLE 테이블이름
(
열_이름 데이터 형식 [NOT NULL, UNIQUE, DEFAULT, CHECK ~],
[PRIMARY KEY(열_이름)],
[FOREIGN KEY(열_이름) REFERENCES 테이블_이름(열_이름)]
);문자
CHAR(n) : 고정형 n개의 문자 저장
varchar(n) : 최대 n개의 문자를 저장하는 가변형식
숫자
INT : 정수
DECIMAL[(c,[s])] : p는 총 자릿수, s는 소숫점 이하 최대 자릿수
날짜
DATE : 날짜
DATETIME : 날짜와 시간
데이터 형식 선택시의 고려 사항
정수 - 숫자가 최대 100까지만 간다면 TINYINT를 사용해 공간을 최소화 한다
문자 - 문자의 길이가 비슷하게 저장된다면 고정형 사용이 낫고, 길이가 크게 가변적이라면 가변형 사용이 나음
특정 DB 선택
USE BOOKSTORE;
1.2 NULL 값 사용
- NULL = 알 수 없음. 따라서 NULL 끼리 동등비교를 해도 참이 아니다.
1.3 기본키 제약조건 설정
기본 키로 지정된 열에는 값이 반드시 NOT NULL이 되야 한다.
기본 키로 설정된 열에는 인덱스가 자동으로 생성된다.
CREATE TABLE 고객
(
고객번호 INT PRIMAR KEY / CONSTRAINT PK_고객번호 PRIMARY KEY)
, 고객명 VARCHAR(30) NULL
);CREATE TABLE 고객
(
고객번호 INT NOT NULL
, 고객명 VARCHAR(30) NULL
, PRIMARY KEY(고객번호)
);ALTER TABLE 고객 DROP CONSTRAINT PK_고객번호;
ALTER TABLE 고객 ADD CONSTRAINT PK_고객번호 PRIMARY KEY(고객번호);
1.4 외래키 제약조건 설정
외래키 제약조건 : 두 테이블 간의 관계를 정의하는 제약조건이다.
참조 무결성 관계가 설정되면 테이블들 간 관련 있는 데이터들에 대해 실수로 변경하거나 삭제하는 것을 막을 수 있다.
참조하는 테이블(child table)의 열을 외래 키(foreign key)
참조되어지는 테이블(parent table)의 열을 외래 키(reference key)
외래 키 설정 제약 조건
참조키는 기본키 or UNIQUE or 고유인덱스를 가져야 한다.
외래 키와 참조 키의 형식이 동일해야 한다.
부모/자식 테이블이 같은 DB에 저장되어야 한다.
1.5 기타 제약조건 추가
- UNIQUE 제약조건
- 기본키 제약조건 + 널값 허용 (단, 1개만)
- CONSTRAINT U_주민번호 UNIQUE
- IDENTITY 속성
- 일반적으로 기본 키 제약조건과 함께 사용되어 테이블에 대한 고유한 행 식별자 역할을 한다.
- 고객번호 INT IENTITY (1,1) NOT NULL
- DEFAULT
- 열에 입력 값이 생략된 경우 넣을 값
- 고객명 VARCHAR(50) NULL CONSTRAINT DF_고객명 DEFAULT ‘무명씨’
- CHECK
- 입력가능 범위나 조건 설정
- 상태 CHAR(4) NULL CONSTRAINT CH_고객상태 CHECK (상태 IN (‘신규’, ‘기존’, ‘이탈’))
- RULE
- CHECK와 동일하나, 룰을 만들어 적용
Section 2. 테이블 구조 변경
2.1 열 추가
- ALTER TABLE 테이블_이름 ADD 열_이름 데이터 형식 NULL_속성 DEFAULT 기본값;
- NULL_속성의 기본값은 NULL이다. NOT NULL 열로 만들면 DEFAULT 제약 조건이 있어야 디는데, WITH VALUES 옵션이 사용된다.
- 열을 추가하는 경우 마지막에 추가 된다.
- ALTER TABLE 고객 ADD 입력일자 DATETIME NULL CONSTRAINT 입력일자 기본값 DEFAULT getDate() with VALUES;
2.2 열 삭제
- 2개 이상의 열이 존재하는 테이블에서만 실행할 수 있다
- ALTER TABLE 테이블_이름 DROP COLUMN 열_이름
- ALTER TABLE 고객 DROP CONSTRAINT 입력일자_기본값 <= 열삭제가 안되는 경우 제약조건 해제 후 시도
2.3 열 변경
- ALTER TABLE 테이블_이름
- ALTER COLUMN (열_이름 데이터_형식 [DEFAULT 식] [NULL 속성])
Section 3. 테이블 제거
- DROP TABLE 테이블_이름;