테이블과 뷰

yunssup·2025년 3월 12일
post-thumbnail

테이블 : 표 형태로 구성된 2차원 구조 (행 - 로우/레코드, 열 - 컬럼/필드)
기본키 : 학번, 아이디 등과 같은 고유한 번호
외래키 : 기본 키와 연결되는 열에 지정
고유키 : 이메일, 휴대폰과 같이 중복되지 않는 열은 고유키 지정 가능

제약조건 : 데이터의 무결성을 지키기 위해 제한하는 조건

📁 기본키(PRIMARY KEY) 제약 조건

  • 기본키
    => 데이터를 구분할 수 있는 식별자
    => 중복 / NULL 불가능
    => 기본 키는 1개만 사용 가능
    => 기본 키 - 외래 키로 연결된 테이블은 외래기칵 설정된 테이블을 먼저 삭제해야 함

📌 기본키 생성 방법 1

create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본 키
	mem_name varchar(10) not null
);

📌 기본키 생성 방법 2

create table member -- 회원 테이블
(	mem_id	char(8) not null,
	mem_name varchar(10) not null,
    primary key (mem_id) -- 기본 키 설정
);

📌 기본키 생성 방법 3 : 이미 만들어진 테이블 수정 alter table 구문 사용

create table member -- 회원 테이블
(	mem_id	char(8) not null,
	mem_name varchar(10) not null
);
alter table member -- member 테이블 변경
	add constraint -- 제약 조건 추가
    primary key (mem_id); -- 기본키로 설정

📁 외래 키(PRIMARY KEY) 제약 조건

  • 외래키 제약 조건
    => 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장
    => 외래키가 설정된 열은 다른 테이블의 기본 키와 연결
    => 기본 키 - 기준 테이블 / 외래 키 - 참조 테이블

📌 외래키 생성 방법 1

create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본키 설정, 따라서 회원 테이블 = 기준 테이블
	mem_name varchar(10) not null,
    mem_number tinyint not null,
    addr char(2) not null,
    phone1 char(3) null,
    phone2 char(8) null,
    height tinyint unsigned null,
    debut_dated date null
);

drop table if exists buy;
create table buy -- 구매 테이블
(	num	int auto_increment not null primary key,
	mem_id	char(8) not null,
	prod_name char(6) not null,
    group_name char(4) null,
    price int unsigned not null,
    amount smallint unsigned not null,
    foreign key(mem_id) references member(mem_id) -- 외래키로 설정
);
[외래키 설정 형식]
    foreign key(열 이름) references 기준_테이블(열 이름) 

📌 외래키 생성 방법 2 : 이미 만들어진 테이블 수정 alter table 구문 사용

create table buy -- 구매 테이블
(	num	int auto_increment not null primary key,
	mem_id	char(8) not null,
	prod_name char(6) not null
);
alter table buy
	add constraint
    foreign key(mem_id) -- 외래 키 제약조건을 buy 테이블의 mem_id에 설정
    references member(mem_id); -- 참조할 기준 테이블 : member 테이블의 mem_id의 열

⁉️ 기준 테이블의 열이 변경된다면?
-> 참조 테이블의 데이터에 문제가 발생 !

📌 on update/delete cascade 구문
기준 테이블의 데이터가 삭제되면 참조 테이블의 데이터도 삭제되는 기능

create table buy -- 구매 테이블
(	num	int auto_increment not null primary key,
	mem_id	char(8) not null,
	prod_name char(6) not null
);
alter table buy
	add constraint
    foreign key(mem_id) references member(mem_id); 
    on update cascade;
    on delete cascade;

📁 고유 키(UNIQUE KEY) 제약 조건

  • 고유키 제약 조건
    => 중복되지 않는 유일한 값을 입력해야 하는 조건
    => 기본 키와 다르게 NULL 값 허용
create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본 키
	mem_name varchar(10) not null,
    email char(30) null unique
);

📁 체크 (CHECK) 제약 조건

  • 체크 제약 조건
    => 입력되는 데이터를 점검하는 기능
    => 기본 키와 다르게 NULL 값 허용
create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본 키
	mem_name varchar(10) not null,
    height tinyint unsigned null check (height=100)
);

or

create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본 키
	mem_name varchar(10) not null,
    height tinyint unsigned null,
    phone1 char(3) null,
);

alter table member
	add constraint
    check (phone1 IN ('02','031')); -- IN은 괄호 안에 있는 값 중 하나와 같아야 참

📁 기본값 정의

  • 기본값 정의
    => 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정
create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본 키
	mem_name varchar(10) not null,
    height tinyint unsigned null default 160, -- 기본값 지정
);

or

create table member -- 회원 테이블
(	mem_id	char(8) not null primary key, -- 기본 키
	mem_name varchar(10) not null,
    height tinyint unsigned null,
);

alter table member
	alter column phone1 set default '02';

기본값이 설정된 열에 기본값을 입력하려면 values에 default라고 써주기!

📁 뷰

결국 뷰는 SELECT 문 !!
📌 뷰 생성 방법

create view v_member
as
	select mem_id, mem_name, addr from member;    
select * from v_member;
  • 뷰를 사용하는 이유
    1) 보안성
    2) 단순화

0개의 댓글