반응형
✅ VARCHAR
와 CHAR
데이터 타입의 특성
특성 | CHAR | VARCHAR |
---|---|---|
데이터 길이 | 고정 길이 (Fixed Length) | 가변 길이 (Variable Length) |
저장 방식 | 지정된 길이만큼 공간을 항상 차지함 | 실제 데이터 길이만큼만 공간을 차지함 |
패딩 방식 | 저장 시 남은 공간은 공백(space)으로 채워짐 | 공백 없이 데이터만 저장됨 |
속도 | 고정 길이이므로 조회 시 빠름 | 가변 길이이므로 조회 시 상대적으로 느림 |
메모리 사용 | 길이와 상관없이 지정된 크기만큼 메모리를 사용 | 실제 데이터 길이만큼만 메모리를 사용 |
적합한 경우 | 일정한 길이의 데이터 (예: 우편번호, 국가코드) | 길이가 유동적인 데이터 (예: 이름, 주소) |
CREATE TABLE test_table (
char_col CHAR(10),
varchar_col VARCHAR(10)
);
INSERT INTO test_table (char_col, varchar_col)
VALUES ('test', 'test');
SELECT char_col, LENGTH(char_col), varchar_col, LENGTH(varchar_col) FROM test_table;
결과:
char_col | LENGTH(char_col) | varchar_col | LENGTH(varchar_col) |
---|---|---|---|
test | 10 | test | 4 |
- CHAR 컬럼은 고정 길이(10)를 채우기 위해
test
뒤에 6개의 공백이 추가됨. - VARCHAR 컬럼은 실제 데이터 길이(4)만큼만 저장됨.
✅ PRIMARY KEY, FOREIGN KEY 설정
데이터베이스에서 PRIMARY KEY와 FOREIGN KEY는 데이터 무결성을 보장하는 중요한 제약 조건이다. 이를 설정하는 방법은 다음과 같은 세 가지로 구분할 수 있다.
예제
이름, 학번, 전공, 성별, 생년월일로 구성된 <학생> 테이블을 정의하는 SQL문을 작성해라. 제약조건은 다음과 같다.
- 이름은 NULL이 올 수 없고, 학번은 기본키이다.
- 전공은 <학과> 테이블의 학과코드를 참조하는 외래키로 사용한다.
- <학과> 테이블에서 삭제가 일어나면 관련된 튜플들의 전공 값을 NULL로 만든다.
- <학과> 테이블에서 학과코드가 변경되면 전공 값도 같은 값으로 변경한다.
- 생년월일은 1980-01-01 이후의 데이터만 저장할 수 있다.
- 제약 조건의 이름은 생년월일제약으로 한다.
- 각 속성의 데이터 타입은 적당하게 지정한다. 단, 성별은 도메인 SEX를 사용한다.
- 테이블 정의 후 별도 제약 조건으로 지정하는 방법
- 제약 조건의 명확한 관리가 필요하거나 제약 조건 이름을 부여할 때 사용
CREATE DOMAIN SEX CHAR(1) CHECK (VALUE IN ('M', 'F'));
CREATE TABLE 학생
(이름 VARCHAR(15) NOT NULL,
학번 CHAR(8),
전공 CHAR(5),
성별 SEX,
생년월일 DATE,
PRIMARY KEY(학번),
FOREIGN KEY(전공)
REFERENCES 학과(학과코드)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT 생년월일 제약
CHECK(생년월일>='1980-01-01')
);
- 컬럼 정의 시 직접 지정하는 방법
- 간단한 테이블 구조를 생성할 때 직관적임
CREATE TABLE 학생 (
학번 CHAR(8) PRIMARY KEY,
이름 VARCHAR(15) NOT NULL,
전공 CHAR(5),
성별 SEX,
생년월일 DATE,
전공 CHAR(5) REFERENCES 학과(학과코드)
ON DELETE SET NULL
ON UPDATE CASCADE
);
- 테이블 생성 후 제약 조건 추가하기 (테이블이 이미 존재한다는 가정)
- 기존 테이블의 제약 조건을 추가하거나 수정할 때 사용
-- PRIMARY KEY 추가
ALTER TABLE 학생
ADD CONSTRAINT PK_학생 PRIMARY KEY (학번);
-- FOREIGN KEY 추가
ALTER TABLE 학생
ADD CONSTRAINT FK_전공 FOREIGN KEY (전공)
REFERENCES 학과(학과코드)
ON DELETE SET NULL
ON UPDATE CASCADE;
반응형