자동으로 생성 된 SQL의 테이블 이름, 열 등은 백틱(`)으로 묶였지만, 묶지 않아도 상관없습니다.
제약 조건으로 테이블을 견고하게
테이블을 만들 때에는 테이블의 구조에 필요한 제약조건을 설정해야 합니다. PRIMARY KEY와 FOREIGN KEY 가 대표적인 제약조건입니다.
제약조건의 기본 개념과 종류
제약조건은 데이터의 무결성을 지키기 위해 제한하는 조건입니다. 중복되지 않아야 할 값이 중복되거나 존재해야 하지만 존재하지 않는 값이 있는 등 결함이 없는 것을 데이터의 무결성이라고 합니다.
기본 키 제약조건
PRIMARY KEY(기본 키)는 행 데이터 중에서 데이터를 구분할 수 있는 식별자 역할을 합니다.
기본 키는 다음과 같은 제약 조건을 가집니다
기본 키의 입력되는 값은 중복될 수 없다
NULL 값이 입력될 수 없다
또한 테이블에는 기본 키를 1개만 가질 수 있습니다. 각 열마다 기본 키를 지정할 수 없으며 하나의 열에만 기본 키를 설정해야 합니다.
외래 키 제약조건
FOREIGN KEY(외래 키)는 두 테이블의 관계를 연결해 줍니다. 외래 키가 설정된 열은 꼭 다른 테이블의 기본 키와 연결됩니다.
기본 키가 있는 테이블을 기준 테이블, 외래 키가 있는 테이블을 참조 테이블이라고 합니다.
참조 테이블이 참조하는 기준 테이블의 열은 반드시 기본 키나, 고유 키로 설정되어 있어야 합니다.
외래 키의 형식은 다음과 같습니다
FOREIGN KEY (열_이름) RFERENCES 기준 테이블(열_이름)
기타 제약 조건
기타 제약 조건에서 고유 키, 체크, 기본값 정의, 널 값 허용에 대해 알아보겠습니다.
Unique(고유 키)
중복되지 않는 유일한 값을 입력해야 한다
고유키와 기본키의 다른 점은 고유키에는 NULL 값을 입력할 수 있고, 한 테이블의 여러 개의 고유 키가 존재할 수 있습니다.
Check(조건)
조건에 해당하는 데이터를 입력해야 한다
체크는 입력되는 데이터를 점검하는 기능을 합니다
열의 정의 뒤에 Check(조건)을 추가하여 사용할 수 있습니다
height INT CHECK( height >= 100 )
100보다 작은 값을 height에 입력할 시 오류를 발생시킵니다
Default(기본 값) 정의
입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법입니다
다음과 같이 정의할 수 있습니다
height INT DEFAULT 160
height에 값을 넣지 않은 경우 자동으로 160이 입력됩니다.
NULL(널 값 허용)
not null과 달리 null 값을 허용합니다.
null은 아무것도 없다는 의미로 0이나 공백과는 다릅니다
가상의 테이블: 뷰
뷰는 데이터베이스 개체 중 하나입니다. 모든 데이터베이스개체는 테이블과 관련이 있지만 특히 뷰는 테이블과 아주 밀접하게 연관되어 있습니다. 하지만 뷰는 테이블처럼 데이터를 가지고 있지는 않습니다. 뷰의 실체는 SELECT문으로 만들어져 있기 때문에 뷰에 접근하는 순간 SLELECT 가 실행되고 그 결과가 화면에 출력되는 형식입니다.
뷰는 단순 뷰와 복합 뷰로 나뉘는데, 단순 뷰는 하나의 테이블과 연관된 뷰, 복합 뷰는 2개 이상의 테이블과 연관된 뷰를 말합니다.
뷰의 개념
뷰를 만드는 형식은 다음과 같습니다.
CREATE VIEW 뷰_이름
AS
SELECT 문;
뷰를 만든 후에 뷰에 접근하는 방식은 테이블과 동일하게 SELECT문을 사용합니다. 전체의 점급할 수도 있고, 필요하면 조건식도 테이블과 동일하게 사용할 수 있습니다.
SELECT 열_이름 FROM 뷰_이름
WHERE 조건; -- 생략가능
ex)
뷰를 만들 때 SELECT 한 열을 불러오는 뷰를 만들었습니다.
뷰를 사용하는 이유는 다음과 같습니다
보안에 도움이 된다: 데이터베이스는 사용자마다 테이블에 접근하는 권한에 차별을 뒤서 처리합니다. 사용자가 뷰에만 접근할 수 있도록 하고, 뷰에 중요한 개인정보를 SELECT 하지 않는 방식으로 중요한 개인정보에 사용자가 접근할 수 없도록 간접적으로 제어할 수 있습니다.
복잡한 SQL문을 단순하게 만들 수 있다: WHERE문이나 JOIN을 사용하는 SQL문을 뷰로 생성해 놓고 사용자들은 해당 뷰에만 접근하도록 하면 사용자가 복잡한 SQL을 입력할 필요가 없어집니다.
CREATE VIEW v_memberbuy
AS
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr,
CONCAT(M.phone1, M.phone2) '연락처'
FROM buy B
INNER JOIN member M
On B.mem_id =M.mem_id;
SELECT * FROM v_memberbuy WHERE mem_name = '블랙핑크';
뷰의 실제 작동
사용자가 뷰에 접근하는 방식은 다음과 같습니다
뷰의 실제 생성, 수정, 삭제
기본적인 뷰를 생성하면서 뷰에서 사용될 열 이름을 테이블과 다르게 지정할 수도 있습니다.
별칭은 열 이름 뒤에 작은따옴표 또는 큰따옴표로 묶어주고, 형식상 AS를 붙여줍니다
뷰를 조회할 때에는 열 이름에 공백이 있으면 백틱(`)으로 묶어줘야 합니다.
뷰의 수정은 ALTER VIEW 구문을 사용하며, 열 이름에 한글을 사용해도 됩니다
뷰를 통한 데이터의 입력
뷰를 통해 데이터를 입력할 수 있습니다. 테이블과 마찬가지로 INSERT 문을 통해 데이터를 입력할 수 있습니다.
INSERT INTO v_viewtest VALUES('TRA', '티아라', '도서', null);
뷰가 참조하는 테이블의 삭제
DROP TABLE IF EXISTS buy, member;
뷰가 참조하는 테이블을 삭제할 시, 뷰를 조회할 수 없습니다.
미션
기본미션: market_db의 회원 테이블(member)을 생성하고, p229 데이터 입력한 후 인증하기
insert문을 통해 테이블에 행을 추가할 수 있습니다
선택미션: p271 확인문제 4번 풀고 인증하기
다음은 기존에 뷰가 있으면 덮어쓰고, 없으면 새로 생성하는 SQL입니다. 빈칸에 들어갈 내용을 고르세요.