View에서 Update등을 지원해야 하나?
- 추가 한다고 해도, 정작 view에서는 조회 못하는 문제 등
create view instructor_info as
select ID, name, building
from instructor, department
where instructor.dept_name = department.dept_name;
이렇게 만든 view 를 통해서 값을 집어넣게 되면, dept_name 파트는 null 값으로 비어있을 거기 때문에, 정작 추가한 view에서 조회를 못하는 상황이 생길 수 있음.
그럼 updatable 한 view는 어떤 특징을 가지냐?
1. view 만들때 from 절에 하나의 table 만 가짐
2. select 절에 expression, aggregate, distinct 없음
3. select 절에 포함되지 않은 attributes들은 null 값이 되어야 함.
4. group by 나 having 가지고 있으면 안됨.
이거 다 만족하더라도
create view history_instructor as
select *
from instructor
where dept_name = 'History';
이렇게 만든 view에 ('23423', 'Brown', 'Biology', 1000000) 값 넣게 되면, 들어는 갈 지라도 view에 안나옴. -> with check option 을 써서 update 후에 view 조건에 안걸리는 update 는 reject 하도록 설정할 수 도 있다.
Transactions
두가지의 sql 을 실행할 때, 둘 다 성공하거나 둘 다 실패하도록 맞추는 것 = atomicity.
기본적으로 SQL implementation은 각 sql statement가 하나의 transaction을 이루도록 하는데, begin atomic ... end 안에 하나의 transaction에 처리하고자 하는 query들을 넣음으로써 여러 query의 atomicity를 보장 할 수 있다.
Integrity
Data의 consistency의 loss 를 방지 = 일관된 양식의 data가 저장되도록, structured data로 조건을 주는 것.
table을 create 할 때 조건을 주고, 이후에
alter table TABLE add CONSTRANIT
통해서 추가할 수 도 있음.
근데 추가할 조건을 만족하지 않는 data가 이미 들어가 있으면? - 확인 해봐야함
!!!! MYSQL 5.7에서는 CHECK 지원 X !!!