VIEW

2024. 1. 15. 18:19DBMS

반응형

데이터베이스에서 뷰(View)는 하나 이상의 테이블로부터 데이터를 논리적으로 처리하는 오브젝트이다. 

실제 데이터를 저장하지 않고 특정 조건에 맞는 데이터를 가지고 있는 가상 테이블이라고 생각할 수 있다. 
하나 이상의 기본 테이블의 데이터를 기반으로 만들어지며, 필요한 경우에만 실행될 때 데이터를 가져온다.

 

- View 는 주로 SELECT 문으로 구성된다.  뷰를 사용하여 데이터를 조회할 때에는 해당 뷰에 대한 SELECT 문을 실행하여 데이터를 가져온다. 따라서 뷰는 데이터를 수정할 수 없다. (일반적으로, 특정 조건에 따라 데이터를 필터링하거나 조인하는 등의 작업에 사용된다.)

- View 는 데이터베이스 사용자에게 기본 테이블을 감추고 뷰를 통해 간접적으로 데이터에 접근할 수 있도록 하는데 이것은 데이터의 보안과 데이터 모델의 간결성을 유지하는 데 도움이 된다. 특정 사용자에게는 특정 열만 보이도록 하거나 여러 테이블의 조인 결과를 단일 뷰로 제공할 수 있다.

- View 는 기본 테이블의 변경사항을 실시간으로 반영한다. 기본 테이블의 데이터가 변경되면 뷰를 쿼리할 때 최신 데이터가 반환된다.

 

 

create view 시스템 권한이 필요하다.

뷰 생성

select 로 간접 access 가능하다.

 

 

 

내가 만든 뷰를 확인하기.

 

1. 입력 오브젝트 있는지 확인 

2. 뷰 타입 찾아서 SELECT TEXT를 가져온다

 

 

 

■ VIEW 종류

 

 

단순 뷰 (Simple View):

뷰 안에는 하나의 SELECT 문만 존재한다.
함수나 복잡한 표현식 등이 사용되지 않은 단순한 SELECT 문이 포함된다.
주로 특정 테이블이나 데이터의 일부분을 간단하게 조회하기 위해 사용된다.

단순 뷰를 통해 수정된 데이터는 해당 뷰가 기반으로 하는 기본 테이블에도 수정이 반영된다.

데이터 수정(INSERT, UPDATE, DELETE)은 가능

 

 

복합 뷰 (Complex View):

뷰 안에 여러 개의 SELECT 문이 존재할 수 있다.
뷰 안에 복잡한 계산식, 함수 호출 등이 사용될 수 있다.
여러 테이블 간의 조인이나 데이터의 조합을 통해 특정 의미 있는 정보를 제공하는 데 사용된다.

일반적으로 데이터 수정(INSERT, UPDATE, DELETE)은 불가능한다.
복잡한 조건과 계산식으로 이루어진 경우에는 해당 데이터를 직접 수정하는 것이 어려울 수 있다.

복합 뷰는 주로 데이터 조회를 위해 사용되며, 데이터의 읽기 전용이 일반적이다.
데이터 수정이 필요한 경우에는 해당 뷰의 기반 테이블에 직접 접근하여 수정해야 한다.

 

 

 

   VIEW CHECK OPTION

 

VIEW의 CHECK OPTION은 VIEW를 통해 INSERT 또는 UPDATE 작업을 수행할 때, VIEW의 정의에 따른 조건을 충족하지 않는 데이터를 추가하거나 변경하는 것을 방지하는 기능을 제공한다.

데이터의 무결성(integrity)을 유지하고, VIEW가 정의한 조건을 위반하는 데이터가 삽입되거나 수정되는 것을 방지한다.

특정 VIEW가 정의된 조건에 따라 특정 컬럼의 값이 특정 범위 내에 있어야 한다고 가정하면 VIEW에 CHECK OPTION을 적용하면 해당 VIEW를 통해 데이터를 추가하거나 수정할 때 해당 조건을 위반하는 경우에는 삽입이나 수정이 거부된다.

이 기능을 통해 특정 VIEW를 통해 데이터를 조작할 때, VIEW가 정의한 제약 조건에 위배되는 데이터가 삽입되거나 수정되는 것을 방지하여 데이터의 무결성을 보호할 수 있다.

 

 

`employees` 테이블에서 `salary`가 5000 이상인 직원만 보여주는 `high_salary_employees` 
뷰를 생성하고, 이 뷰에 대해 CHECK OPTION을 적용하는 법

1. `employees` 테이블과 데이터 준비:


CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(100),
    salary DECIMAL(10, 2)
);

INSERT INTO employees (employee_id, employee_name, salary) VALUES
(1, 'John', 6000),
(2, 'Jane', 5500),
(3, 'Alice', 4800);


2. `high_salary_employees` 뷰 생성:


CREATE VIEW high_salary_employees AS
SELECT * FROM employees
WHERE salary >= 5000;


3. `high_salary_employees` 뷰에 CHECK OPTION 적용:


ALTER VIEW high_salary_employees AS
SELECT * FROM employees
WHERE salary >= 5000
WITH CHECK OPTION;


이제 `high_salary_employees` 뷰는 `salary`가 5000 이상인 직원만 보여주는 뷰이다.
그리고 `CHECK OPTION`을 적용함으로써 새로운 데이터를 추가하거나 기존 데이터를 수정할 때, 
뷰의 정의 조건을 위반하는 경우에는 해당 작업이 거부된다.

 `salary`가 4900인 새로운 직원을 추가하려고 할 경우 에러가 발생


INSERT INTO high_salary_employees (employee_id, employee_name, salary) VALUES
(4, 'Bob', 4900);




ERROR 1369 (HY000): CHECK OPTION failed 'test.high_salary_employees'

 `high_salary_employees` 뷰의 정의 조건에 위배되기 때문에 데이터의 추가가 거부된 것
반응형

'DBMS' 카테고리의 다른 글

본질식별자 (Natural Key)  (0) 2024.03.03
복합식별자(Composite Key)  (0) 2024.03.03
DROP DELETE TRUNCATE 차이점  (0) 2024.01.12
2차 3차 정규화 차이점  (1) 2024.01.04
데이터의 표현  (1) 2024.01.03