[혼공S] 4주차_제약조건, 뷰

2025. 2. 9. 20:48혼자 공부하는 SQL

오늘은 늦게 시작해서 빠르게 달리겠습니다람쥐 ε=ε=┏( >_<)┛

 

테이블 만들기

  (열) 컬럼 or 필드
(행) 로우 or 레코드  

코드로 테이블을 만들어 봄(Refresh All 해줘야 보임)

 

경남 영어로 입력해버림ㅋㅋㅋㅠㅠ

오류 발생해서 당황했는데 함정이었음...집중해서 계속 진행!

시원하게 날려주고 다시 만들기~ (절대 아깝지 않음)

열심히 테이블 만들기(타닥타닥💻)

또 열심히 데이터 입력 (타닥타닥💻)

제약조건으로 테이블을 견고하게

제약조건 : 테이블의 무결성(no결함)을 지키기 위해 제한하는 조건

 

대표적인 제약조건

  • PRIMARY KEY 제약조건
  • FOREIGN KEY  제약조건
  • UNIQUE  제약조건
  • CHECK  제약조건
  • DEFAULT 정의
  • NULL 값 허용
PRIMARY KEY 제약조건

- 데이터를 식별할 수 있는 식별자

 

중복X, nullX, 테이블 당 1개가 최대, 테이블의 특성을 가장 잘 반영하는 열을 선택, 

ex) 회원 아이디

 

기본 키론 생성하면 클래스형 인덱스( 데이터가 실제로 정렬되어 저장되는 인덱스, 배열에 주소 같은?)가 생성된다.

 

- 이미 만들어진 테이블에 제약조건 넣기 

ALTER TABLE member		-- member 테이블 변결
	ADD CONSTRAINT		-- 제약조건 추가
    	PRIMARY KEY(mem_id);	-- mem_id 열에 기본 키 제약조건 설정

 

- 기본 키에 이름 지정하기

CONSTRAINT PRIMARY KEY PK_member_mem_id (mem_id)

 

 

FOREIGN KEY  제약조건

- 두 테이블 사이이 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할

기준 테이블 : 기본 키가 있는 테이블 

참조 테이블 : 외래 키가 있는 테이블

 

* 참조하는 기준 테이블의 열은 반드시 기본 키고유 키로 설정되어 있어야 함

 

- ALTER TABLE 사용

ALTER TABLE buy
    ADD CONSTARINT
    FOREIGN KEY(mem_id)		-- 외래 기 제약조건을 buy 테이블의 mem_id에 설정
    REFERENCES member(mem_id);	-- 참조할 기준 테이블은 member 테이블의 mem_id 열

 

- 기준 테이블에서 기본 키가 되는 열의 데이터를 변경할 때 

ALTER TABLE buy
    ADD CONSTRAINT
    FOREIGN KEY(mem_id) RETERENCES member(mem_id)
    ON UPDATE CASCADE
    ON DELETE CASCADE;

ON UPDATE CASCADE, ON DELETE CASCADE 

- 기준 테이블의 데이터가 삭제되면 참조 테이브르이 데이터도 삭제

 

UNIQUE  제약조건

- 중복되지 않는 유일한 값을 입력해야 하는 조건(null 허용, 테이블에 여러 개 설정 가능)

 

CHECK  제약조건

- 입력되는 데이터를 점검하는 기능

ex) CHECK (height >= 100)  →  100이상만 입력 가능

 

DEFAULT 정의

- 값을 입력하지 않았을 떄 자동으로 입력될 값을 미리 지정

 

NULL 값 허용

- null 허용(아무 것도 없다!)

 

가상의 테이블: 뷰

단순 뷰 : 하나의 테이블과 연관된 뷰

복합 뷰 : 2개 이상의 테이블과 연관된 뷰

CREATE VIEW 뷰_이름
AS
    SELECT 문;

뷰 만드는 형식

SELECT 열_이름 FROM 뷰_이름
    [WHERE 조건];

뷰에 접근(ΦωΦ)

 

! 뷰를 사용하는 이유 !

  1. 보안에 도움이 된다
  2. 복잡한 SQL을 단순하게 만들수 있다.
USE market_db;
CREATE VIEW v_viewtest1
AS
	SELECT B.member 'Member ID', M.mem_name AS 'Member Name',
    	B.prod_name "Product Name", CONCAT(M.phone1, M.phone2) AS "Office Phone"
        FROM buy B
            INNER JOIN member M
            ON B.mem_id = M.mem_id;
            
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1;	-- 백틱 사용~

생성 CREATE VIEW

ALTER VIEW v_viewtest1
AS
	SELECT B.member '회원 아이디', M.mem_name AS '회원 이름',
    	B.prod_name "제품 이름", CONCAT(M.phone1, M.phone2) AS "연락처"
        FROM buy B
            INNER JOIN member M
            ON B.mem_id = M.mem_id;
            
SELECT DISTINCT `회원 아이디`, `회원 이름` FROM v_viewtest1;

수정 ALTER VIEW

 

DROP VIEW v_viewtest1;

삭제 DROP VIEW

 

DESCRIBE v_viewtest2;

정보 확인 DESCRIBE

SHOW CREATE VIEW v_viewtest2;

뷰의 소스 코드 확인 SHOW CREATE VIEW

 

ALTER VIEW v_height167
AS
	SELECT * FROM member WHERE height >= 167 WITH CHECK OPTION;

설정된 값 범위가 벗어나는 값은 입력 제한 WITH CHECK OPTION

 

CHECK TABLE v_height167;

뷰의 상태 확인 CHECK TABLE

 


오늘의 숙제

1. market_db의 회원테이블 생성

2. 데이터 입력

+ 271p 4번(CREATE OR REPLACE VIEW)

기본 숙제, 추가 숙제 한 번에 하기~

 

그럼

2만

3만

Chill만