SQL 4 - 테이블과 뷰

우수민·2023년 12월 18일
0

강의 자료

목록 보기
13/18
post-thumbnail

제약 조건

  • 제약 조건(constraint) : 데이터의 무결성을 지키기 위해 제한하는 조건
  • 무결성 : 데이터에 결함이 없음
  1. 기본 키 제약 조건
  • 기본 키(Primary Key) : 많은 행 데이터에서 데이터를 구분할수 있는 식별자
    • ex. 회원 테이블의 아이디, 학생의 학번
  • 특징
    • NULL 값이 입력될 수 없음
    • 테이블은 기본키를 1개만 가질 수 있음
    -- 방법 1
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL
    );
    
    -- 방법2
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL,
        PRIMARY KEY (mem_id)
    );
    
    -- 방법3
    CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL
    );
    ALTER TABLE member
    	ADD CONSTRAINT -- 제약 조건 추가
        PRIMARY KET (mem_id); -- 기본키 제약 조건 설정
  1. 외래 키 제약조건
  • 외래 키(Foreign Key) : 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할
  • 회원 테이블(기준 테이블)과 구매 테이블(참조 테이블)이 대표적인 기본 키-외래 키 관계
  • 특징
    • 참조 테이블이 참조하는 기준 테이블의 열은 반드시 기본 키나, 고유 키로 설정되어 있어야함
    • 외래키의 형식 : FOREIGN KEY(열_이름) REFERENCES 기준_테이블(열_이름)
    • 기준 테이블의 열이 Primary Key 또는 Unique가 아니라면 외래 키 관계는 설정되지 않음
    -- 방법1
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL
    );
    CREATE TABLE buy(
    	num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
        mem_id CHAR(8) NOT NULL,
        prod_name CHAR(6) NOT NULL,
        FOREIGN KEY(mem_id) REFERENCES member(mem_id)
    )
    
    -- 방법2
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL
    );
    ALTER TABLE member
    	ADD CONSTRAINT -- 제약 조건 추가
        FOREIGN KEY(mem_id) 
        REFERENCES member(mem_id);
  • 기본 키-외래 키로 맺어진 후에는 기준 테이블의 열 이름이 변경되지 않음(삭제 또한 불가능)
    • 이를 해결하기 위해 ON UPDATE CASCADE 문을 활용
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL
    );
    ALTER TABLE member
    	ADD CONSTRAINT -- 제약 조건 추가
        FOREIGN KEY(mem_id) 
        REFERENCES member(mem_id)
        ON UPDATE CASCADE
        ON DELETE CASCADE
        ;
  1. 고유키 제약조건
  • 고유 키(Unique) : 중복되지 않은 유일한 값을 입력
  • 기본 키 제약조건과 비슷하지만, 차이점은 고유 키 제약조건은 NULL을 허용
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL,
        email CHAR(30) NULL UNIQUE
    );
-- 고유키로 설정할 열을 NOT NULL로 지정하면 고유키도 기본키와 동일하게 중복도 안되고 비어 있을 수 없음
  1. 체크 제약조건
  • 체크(Check) : 입력되는 데이터를 점검하는 기능
	-- 방법1
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        -- height 100이상만 입력 가능
        height TINYINT UNSIGNED NULL CHECK (height >= 100) 
    );
    
    -- 방법2
    ALTER TABLE member
    	ADD CONSTRAINT
        CHECK (phone1 IN ('02', '031'))
    ;
  1. 기본값 정의
  • 값을 입력하지 않았을때, 자동으로 입력될 값을 미리 지정하는 방법
	-- 방법1
	CREATE TABLE member(
    	mem_id CHAR(8) NOT NULL PRIMARY KEY,
        mem_name VARCHAR(10) NOT NULL,
        height TINYINT UNSIGNED NULL DEFAULT 160
        phone1 CHAR(3) NULL
    );
    
    -- 방법2
    ALTER TABLE member
    	ALTER COLUMN phone1 SET DEFAILT '02'
    ;
    
    -- 입력시
    INSERT INTO member VALUES('RED', '레드', 161, default)

가상의 테이블 : 뷰

  • 뷰(view) : 데이터베이스 개체 중에 하나
    • 단순 뷰 : 하나의 테이블과 연관된 뷰
    • 복합 뷰 : 2개 이상의 테이블과 연관된 뷰
  • 특징
    • 테이블처럼 데이터를 가지고 있지 않음
    • 뷰의 실체는 SELECT 문으로 만들어져 있기 때문에 뷰에 접근하는 순간 SELECT가 실행되고 그 결과가 화면에 출력 되는 방식
    • '바로 가기 아이콘'과 비슷
    • 뷰의 이름만 보고도 뷰인지를 알아볼 수 있도록 이름 앞에 v_를 붙이는 것이 일반적
  • 뷰를 사용하는 이유
    1. 보안에 도움이 됨
    2. 복잡한 SQL을 단순하게 만듬
  1. 뷰의 생성
  • CREATE VIEW 뷰_이름
  • CREATE OR REPLACE VIEW는 기존에 뷰가 있어도 덮어씀
  	-- 생성시
  	CREATE VIEW 뷰_이름
  	AS
  		SELECT;
    
  	-- 활용시
  	SELECT 열_이름 FROM 뷰_이름
  		[WHERE 조건];
  1. 뷰의 수정
    -- 생성시
    ALTER VIEW 뷰_이름
    AS
  		SELECT;
  1. 뷰의 삭제
	DROP VIEW 뷰_이름;
  1. 뷰의 정보 확인
	DESCRIBE v_viewtest2;

  • 참고 서적 : 혼자 공부하는 SQL
profile
데이터 분석하고 있습니다

0개의 댓글