본문 바로가기
BE/SQL

4. 테이블과 뷰

by soohykim 2025. 4. 9.
728x90
반응형

📒 테이블과 뷰

📕 1. 제약 조건

1) PRIMARY KEY 제약 조건

  • 입력되는 값 중복X, NULL값 X
    • 기본 키로 생성한 것은 자동으로 클러스터형 인덱스가 생성됨
    • CREATE TABLE 구문 안에서 기본 키를 지정하면 MySQL이 알아서 설정
  • 기본 키는 각 테이블 별로 하나만 존재
    • 두 개 이상의 열을 합쳐서 기본 키로 설정 가능
# 기본 키 지정
CREATE TABLE userTBL
(
	userID    CHAR(8) NOT NULL PRIMARY KEY,
	name      VARCHAR(10) NOT NULL,
	birthYear INT NOT NULL
);

# 기본 키 이름 지정
CREATE TABLE userTBL
(
	userID    CHAR(8) NOT NULL,
	name      VARCHAR(10) NOT NULL,
	birthYear INT NOT NULL,
	CONSTRAINT PRIMARY KEY PK_userTBL_userID (userID)
);

# 기본 키 변경
ALTER TABLE userTBL
	ADD CONSTRAINT PK_userTBL_userID
		PRIMARY KEY (userID);

2) FOREIGN KEY 제약 조건

  • 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장하는 역할
    • 외래 키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존
# 외래 키 지정
CREATE TABLE userTBL
(
	userID    CHAR(8) NOT NULL PRIMARY KEY,
	name      VARCHAR(10) NOT NULL,
	birthYear INT NOT NULL
);
CREATE TABLE buyTBL
(
	num       INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
	userID    CHAR(8) NOT NULL,
	prodName  CHAR(6) NOT NULL,
	FOREIGN KEY(userID) REFERENCES userTBL(userID)
);

# 외래 키 이름 지정
CREATE TABLE buyTBL
(
	num       INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
	userID    CHAR(8) NOT NULL,
	prodName  CHAR(6) NOT NULL,
	CONSTRAINT FK_userTBL_buyTBL FOREIGN KEY(userID) REFERENCES userTBL(userID)
);

# 외래 키 변경
ALTER TABLE buyTBL
	ADD CONSTRAINT FK_userTBL_buyTBL
		FOREIGN KEY (userID)
		REFERENCES userTBL(userID);

3) UNIQUE 제약 조건

  • 중복되지 않는 유일한 값 입력 조건
  • PRIMARY KEY와 비슷, NULL 허용
# 고유 키 지정
CREATE TABLE userTBL
(
	userID    CHAR(8) NOT NULL PRIMARY KEY,
	name      VARCHAR(10) NOT NULL,
	birthYear INT NOT NULL,
	email     CHAR(30) NULL UNIQUE
);

# 고유 키 이름 지정
CREATE TABLE userTBL
(
	userID    CHAR(8) NOT NULL PRIMARY KEY,
	name      VARCHAR(10) NOT NULL,
	birthYear INT NOT NULL,
	email     CHAR(8) NULL,
	CONSTRINT AK_email UNIQUE (email);
);

4) CHECK 제약 조건

  • 입력되는 데이터 점검
# CHECK 제약 조건 설정
CREATE TABLE userTBL
(
	userID    CHAR(8) PRIMARY KEY,
	name      VARCHAR(10),
	birthYear INT CHECK (birthYear >= 1900 AND birthYear <= 2023),
	CONSTRAINT CK_name CHECK (name IS NOT NULL)
);

# CHECK 제약 조건 추가 
ALTER TABLE userTBL
	ADD CONSTRAINT CK_mobile1
	CHECK (mobile IN ('010', '011', '016', '017', '018', '019'));

5) DEFAULT 정의

  • 값을 입력하지 않았을 때, 자동으로 입력되는 기본 값을 정의
# DEFAULT 정의 
CREATE TABLE userTBL
(
	userID    CHAR(8) NOT NULL PRIMARY KEY,
	name      VARCHAR(10) NOT NULL,
	birthYear INT NOT NULL DEFAULT -1
);

# DEFAULT 변경
ALTER TABLE userTBL
	ALTER COLUMN birthYear SET DEFAULT -1;

6) 임시 테이블

  • 임시로 잠깐 사용하는 용도
    • TEMPORARY TABLE 외에는 테이블과 정의/사용법이 동일
    • 세션 내에서만 존재, 세션이 닫히면 자동으로 삭제
    • 임시 테이블은 생성한 클라이언트에서만 접근 가능, 다른 클라이언트는 접근 불가
    • 데이터베이스 내의 다른 테이블과 이름 동일하게 생성 가능 (기존 테이블은 접근 불가능)
  • 임시 테이블 삭제 시점
    • 사용자가 DROP TABLE로 직접 삭제
    • Workbench를 종료하거나 mysql 클라이언트를 종료하면 삭제됨
    • MySQL 서비스가 재시작되면 삭제됨
  • 형식
CREATE TEMPORARY TABLE (IF NOT EXISTS) 테이블 이름
( 열 정의 ... )

📕 2. 뷰

  • 일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체
    • SELECT문의 결과
    • 원래 테이블에 접근한 것과 동일한 결과
  • 뷰를 통해서 원테이블 데이터 수정 가능
  • 사용 이유
    • 개인정보 등 보안 효과
    • 복잡한 쿼리를 단순화 시킴
CREATE VIEW v_usertbl
AS 
	SELECT userid, name, addr FROM usertbl;

📕 3. 테이블스페이스

  • 대용량의 데이터를 다룰 때 성능 향상
  • 데이터베이스가 테이블이 저장되는 논리적 공간, 테이블 스페이스는 테이블이 실제로 저장되는 물리적인 공간
    • 별도의 테이블스페이스를 지정하지 않으면, 시스템 테이블스페이스에 테이블 저장
    • 시스템 변수 innodb_data_file_path에 시스템 테이블스페이스 정보 저장 (파일명 : 파일크기 : 최대파일크기)
SHOW VARIABLES LIKE 'innodb_data_file_path';
728x90
반응형

'BE > SQL' 카테고리의 다른 글

6. 스토어드 프로그램  (0) 2025.04.09
5. 인덱스  (0) 2025.04.09
3. SQL 문법  (2) 2025.04.09
2. MySQL 유틸리티  (0) 2025.04.09
1. MySQL 설치  (0) 2025.04.09