SQL의 데이터 정의어(DDL) 로 릴레이션에 대한 정보를 명세한다.
| 타입 | 설명 |
|---|---|
char(n) | 고정 길이 문자열, 길이 n을 사용자가 지정 |
varchar(n) | 가변 길이 문자열, 최대 길이 n |
int | 정수 |
smallint | 작은 정수 |
numeric(p, d) | 고정 소수점 수. 전체 p자리, 그중 소수점 오른쪽 d자리 |
real | 부동 소수점 수 |
float(n) | 부동 소수점 수, 최소 n자리 정밀도 |
예:
numeric(8,2)→ 총 8자리, 소수점 이하 2자리 (예: 123456.78)
char(n)은 고정 길이, varchar(n)은 실제 문자열 길이에 따라 더 유연하게 저장한다.int와 smallint는 표현 가능한 정수 범위와 필요한 저장 공간이 다르다.real, float(n)은 근삿값을 표현하는 부동 소수점 타입이고, numeric(p,d)는 자릿수가 정해진 정확한 고정 소수점 값에 적합하다.
CREATE는 테이블을 생성하는 SQL 명령어이다.
create table r (A1 D1, A2 D2, ..., An Dn,
(integrity-constraint1),
...,
(integrity-constraintk))
r : 릴레이션 이름Ai : 릴레이션 r의 스키마에 있는 속성 이름Di : 속성 Ai의 도메인(데이터 타입)예시
create table instructor (
ID char(5),
name varchar(20) not null,
dept_name varchar(20),
salary numeric(8,2),
primary key (ID));
insert into instructor values ('10211', 'Smith', 'Biology', 66000);
insert into instructor values ('10211', null, 'Biology', 66000); -- name이 not null 이므로 오류
두 번째 insert는
name varchar(20) not null제약 위반 → 거부됨.
not null — 해당 속성에 null 값을 허용하지 않음primary key (A1, ..., An) — 기본키. (암묵적으로 not null + 유일)foreign key (Am, ..., An) references r — 외래키. 다른 관계 r을 참조외래키 값은 참조 대상 관계에 실제로 존재해야 한다.
- 즉, 외래키는 다른 테이블의 기본키 또는 후보키이어야 한다.
- 예를 들어
instructor.dept_name이department를 참조한다면,department에 없는 학과 이름을 넣는 SQL은 거부된다.
예시 — dept_name 을 department의 기본키로 두고 참조
create table instructor (
ID char(5),
name varchar(20) not null,
dept_name varchar(20),
salary numeric(8,2),
primary key (ID),
foreign key (dept_name) references department);
추가 예시 — student 관계 정의
create table student (
ID varchar(5),
name varchar(20) not null,
dept_name varchar(20),
tot_cred numeric(3,0),
primary key (ID),
foreign key (dept_name) references department);
insert into instructor values ('10211', 'Smith', 'Biology', 66000);
INSERT는 해당 테이블에 튜플을 추가하는 명령어이다.
delete from student; -- student 테이블의 모든 튜플 삭제
DELETE는 해당 테이블의 모든 튜플을 삭제하는 명령어이다.
drop table r; -- 릴레이션(테이블) 자체(스키마 포함)를 삭제
DROP은 릴레이션(테이블) 자체(스키마 포함)를 삭제한다.
alter table r add A D; -- 속성 A(도메인 D)를 관계 r에 추가
alter table r drop A; -- 속성 A를 제거
ALTER는 기존 릴레이션에 속성을 추가할 때 사용하는 명령어이다.
add 시 기존 튜플들의 새 속성 값은 모두 null 이 된다.drop(속성 제거)은 많은 DBMS가 지원하지 않는다.
delete는 튜플만 삭제하고 테이블 스키마는 남긴다.
drop은 테이블 자체를 제거한다.
alter로 속성을 추가하면 기존 튜플의 새 속성값은null이 된다.
Reference:
Database System Concept-7th Edition
건국대학교 김욱희 교수님 - Database 수업