기본 미션: p. 226의 market_db의 회원 테이블(member) 생성하고, p. 229 데이터 입력한 후 인증하기
![](https://velog.velcdn.com/images/hyewon4052/post/84a08500-59d7-4841-80bb-9343f4b40c30/image.png)
![](https://velog.velcdn.com/images/hyewon4052/post/51327c0d-0e4d-4b8e-ace9-3cc03917c921/image.png)
선택 미션: p. 271 확인 문제 4번 풀고 인증하기
![](https://velog.velcdn.com/images/hyewon4052/post/749cac59-98ee-410c-bbfe-abc2eb6316c0/image.jpg)
![](https://velog.velcdn.com/images/hyewon4052/post/12758053-d8f6-463a-8bc7-3bb8e32c1c77/image.jpg)
![](https://velog.velcdn.com/images/hyewon4052/post/0cb18885-3c49-4609-be43-2669ab7709e6/image.png)
GUI환경에서 테이블 만들기
데이터베이스 생성
![](https://velog.velcdn.com/images/hyewon4052/post/8cb8c94f-c41c-47fc-b4bd-03b095e3fc30/image.png)
- 만약 데이터베이스를 잘못만들었을경우 DROP DATABASE naver_db를 입력해주면 됨
테이블 생성
![](https://velog.velcdn.com/images/hyewon4052/post/91e5861b-5184-421b-9093-040803514b56/image.png)
![](https://velog.velcdn.com/images/hyewon4052/post/557cccc3-a276-4d13-a48c-54ab698dd59c/image.png)
회원테이블과 구매테이블 작성해줌
순번은 자동 증가를 위해서 AI로 지정
데이터 입력
![](https://velog.velcdn.com/images/hyewon4052/post/fa9439b4-b842-4b3c-942b-f41001c3343f/image.png)
![](https://velog.velcdn.com/images/hyewon4052/post/2fd40e8b-b618-4e8f-9b17-71c361a107d6/image.png)
회원테이블과 구매테이블의 데이터를 작성해주는데
구매 테이블의 mem_id는 반드시 회원테이블의 mem_id로 존재해야하기 때문에 오류가 남
SQL로 테이블 만들기
데이터베이스 생성
![](https://velog.velcdn.com/images/hyewon4052/post/722262c1-b743-4e15-bd6e-5d6803b5751f/image.png)
앞에서 사용한 naver_db를 삭제후 다시 생성
테이블 생성
![](https://velog.velcdn.com/images/hyewon4052/post/69005d00-1077-4d8a-9887-6f4a92b57171/image.png)
- NULL = 빈 값 허용, NOT NULL = 반드시 값을 넣어야 함
- 기본키로 설정하기 위해 PRIMARY KEY문을 붙여줌 (NOT NULL을 생략해도 NOT NULL로 취급함)
![](https://velog.velcdn.com/images/hyewon4052/post/639c032e-39eb-4b80-a787-66da0a62c221/image.png)
- AUTO_INCREMENT로 지정한 열은 PRIMARY KEY나 UNIQUE로 꼭 지정해야함
- 이 테이블의 mem_id열은 혼자 존재하는 것이 아니라 꼭 member 테이블의 mem_id에도 값이 있어야 함
데이터 입력
![](https://velog.velcdn.com/images/hyewon4052/post/809a77d1-655b-4fd6-bba7-23de63f3939c/image.png)
![](https://velog.velcdn.com/images/hyewon4052/post/f88f53d4-cf29-4045-99b0-589fd5919bf6/image.png)
![](https://velog.velcdn.com/images/hyewon4052/post/4d345d07-126a-4bd0-90a4-5c1ef25105cb/image.png)
APN이 아직 회원테이블에 존재하지 않아서 워크벤치에서 진행했던 것과 같이 오류가 발생함
기본 키 제약조건
- 데이터를 구분할 수 있는 식별자를 기본 키라고 부름
- 기본키에 입력되는 값은 중복될 수 없으며, NULL값이 입력될 수 없음
CREATE TABLE에서 설정하는 기본 키 제약조건
![](https://velog.velcdn.com/images/hyewon4052/post/e077f259-8af3-4ca5-93e9-7a01aeb606a8/image.png)
- 열 이름 위에 PRIMARY KEY를 붙여주면 기본키로 설정됨
회원아이디는 회원테이블의 기본키가 되었고, 앞으로 입력되는 회원 아이디는 중복될 수 없고, 비어있을수도 없음
![](https://velog.velcdn.com/images/hyewon4052/post/c0b0d5df-d112-44fd-a335-bd4ce0f71815/image.png)
제일 마지막행에 PRIMARY KEY(mem_id)를 추가해도 기본 키를 지정할 수 있음
ALTER TABLE에서 설정하는 기본 키 제약조건
![](https://velog.velcdn.com/images/hyewon4052/post/532ae694-3bae-468a-b99a-ed7ee638a260/image.png)
제약조건을 설정하는 또 다른 방법으로, 이미 만들어진 테이블을 수정하는 ALTER TABLE구문을 사용할 수 있음
외래 키 제약조건
- 외래 키 제약조건은 두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할을 함
- 기본 키가 있는 회원테이블을 기준 테이블이라고 부르고, 외래 키가 있는 구매 테이블을 참조 테이블이라고 부름
CREATE TABLE에서 설정하는 외래 키 제약조건
![](https://velog.velcdn.com/images/hyewon4052/post/ca557c51-db29-4a37-9bba-72a3efcc69e4/image.png)
- CREATE TABLE 끝에 FOREIGN KEY 키워드를 설정하면 외래 키가 생성됨
- 외래 키의 형식은 FOREIGN KEY(열 이름) REFERENCES 기준_테이블(열 이름)
ALTER TABLE에서 설정하는 외래 키 제약조건
![](https://velog.velcdn.com/images/hyewon4052/post/0af19c0d-2cef-4149-bfbd-4d7b51361a7f/image.png)
기준테이블의 열이 변경될 경우
![](https://velog.velcdn.com/images/hyewon4052/post/99cae11b-089d-4b10-8531-169cb0232acb/image.png)
내부 조인을 사용해서 물품 및 사용자 정보 확인
![](https://velog.velcdn.com/images/hyewon4052/post/b7a6c033-0bb1-48c2-95fa-d87aa5ea2ba0/image.png)
![](https://velog.velcdn.com/images/hyewon4052/post/b2bf81eb-40c5-427a-b655-e9203322b966/image.png)
BLK의 아이디를 PINK로 변경할 경우 오류가 발생함
![](https://velog.velcdn.com/images/hyewon4052/post/6fa23f71-4464-4d41-a3db-7d6939362045/image.png)
이럴때 기준 테이블의 데이터가 삭제되면 참조 테이블의 데이터도 삭제되는 기능인 ON UPDATE CASCADE문이 필요함
![](https://velog.velcdn.com/images/hyewon4052/post/9d7ddf63-2df1-4eb2-8022-00be84379cdb/image.png)
이제 PINK로 아이디를 변경해도 제대로 출력되는 것을 볼 수 있음
기타 제약조건
고유 키 제약조건
- 중복되지 않는 유일한 값을 입력해야하는 조건
- 고유키는 중복은 허용하지 않지만 비어 있는 값은 허용함
체크 제약조건
- 입력되는 데이터를 점검하는 기능
- 열의 정의 뒤에 조건만 추가해주면 됨
![](https://velog.velcdn.com/images/hyewon4052/post/d9fbcede-e244-434f-b107-6a9711e08613/image.png)
기본값 정의
- 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해놓는 방법
![](https://velog.velcdn.com/images/hyewon4052/post/ef0c7398-5145-4b2c-b337-1124f7b82572/image.png)
널 값 허용
- NULL 값은 '아무것도 없다'라는 의미임 공백이나 0과는 다름
뷰의 개념
뷰의 기본 생성
뷰를 만드는 형식
CREATE VIEW 뷰_이름
AS
SELECT 문;
뷰를 만든 후에 뷰에 접근하는 방식은 테이블과 동일하게 SELECT문을 사용함
필요하다면 조건식도 테이블과 동일하게 사용가능
뷰의 작동
- 사용자는 뷰를 테이블이라고 생각하고 접근
- 뷰는 기본적으로 읽기 전용으로 사용되지만, 뷰를 통해서 원본 테이블의 데이터를 수정할 수도 있음
뷰를 사용하는 이유
-
보안에 도움이 됨
예를들어, 아이디, 이름, 주소만 보이는 뷰를 생성해서 회원 테이블에 접근하지 못하도록 권한을 제한하고, 뷰에만 접근할 수 있도록 권한을 줄 수 있음
-
복잡한 SQL을 단순하게 만들 수 있음
SQL을 뷰로 생성해놓고 사용자들은 해당 뷰에만 접근하도록 하면 복잡한 SQL을 입력할 필요가 없어짐
뷰의 실제 작동
뷰의 실제 생성, 수정, 삭제
- 뷰에서 사용될 열 이름을 테이블과 다르게 지정할 수 있음
- 뷰를 조회할 때 열 이름에 공백이 있다면 백틱( ` ) 으로 묶어줘야 함
![](https://velog.velcdn.com/images/hyewon4052/post/6a722d99-a1ef-4605-b5eb-b7d2073562e0/image.png)
뷰의 수정은 ALTER VIEW구문을 사용하며 열 이름에 한글을 사용해도 됨
![](https://velog.velcdn.com/images/hyewon4052/post/d9a83bd2-b58c-4e42-a8ab-78572ce7eb1e/image.png)
뷰의 삭제는 DROP VIEW를 사용함
![](https://velog.velcdn.com/images/hyewon4052/post/5032a71b-b2b2-4c86-8c73-8108f4dcb6a3/image.png)
뷰의 정보 확인
![](https://velog.velcdn.com/images/hyewon4052/post/ce134a94-472f-4271-80e4-4365e4b85203/image.png)
DESCRIBE문으로 기존 뷰의 정보 확인 가능
뷰를 통한 데이터의 수정 / 삭제
![](https://velog.velcdn.com/images/hyewon4052/post/eca23341-f91e-4ab6-998a-b511cebc22c9/image.png)
v_member가 참조하는 member의 열중에서 mem_number열은 NOT NULL로 설정되어서 반드시 입력해줘야 함
하지만 v_number에서는 mem_number열을 참조하고 있지 않아 값을 입력할 방법이 없음
만약 v_member 뷰를 통해서 테이블에 값을 입력하고 싶다면
- v_number에 mem_number 열을 포함하도록 뷰를 재정의
- member에서 mem_number열의 속성을 NULL로 바꾸거나 기본값 재정의
를 해야함
뷰를 통한 데이터의 입력
- 예약어 WITH CHECK OPTION = 뷰에 설정된 값의 범위가 벗어나는 값은 입력되지 않도록 함
![](https://velog.velcdn.com/images/hyewon4052/post/e59069c5-475f-4140-a025-950b5dfb5bc4/image.png)
뷰가 참조하는 테이블의 삭제
![](https://velog.velcdn.com/images/hyewon4052/post/a96b4a76-f2e1-4f5d-a98e-7fe340a23b9f/image.png)
여러개의 뷰가 두 테이블과 관련되어 있는데도 쉽게 삭제됨
![](https://velog.velcdn.com/images/hyewon4052/post/121958cf-f412-41a1-861d-923fbe5b8fee/image.png)
CHECK TABLE문으로 뷰의 상태를 확인할 수 있는데 뷰가 참조하는 테이블이 없어서 오류가 발생함