YZ ZONE

데이터 제어어 DCL Data Control Language 본문

IT

데이터 제어어 DCL Data Control Language

러블리YZ 2023. 2. 3. 14:32

데이터 제어어 DCL Data Control Language

보안을 위해 데이터에 대한 접근, 사용권한을 부여 grant, 취소 revoke

view

다른 테이블을 기반으로 만들어진 가상 테이블 virtual table로 데이터를 실제로 저장하고 있지는 않음.

창을 통해 기본 테이블 base table을 들여다 볼 수 있다.

뷰 생성

order by를 사용못한다는 점만 제외하면 일반 select문과 동일. [(속성)]생략시 select 절에 나열된 속성의 이름을 뷰에서도 그대로 사용.

with check option: 생성한 뷰에 삽입,수정 연산시 select문에서 where키워드와 함께 제시한 뷰의 정의 조건을 위반하면 수행되지 않도록 하는 제약조건.

#기본 약식
create view 뷰이름[(속성)]
as select문
[with check option];

#고객테이블에서 등급이 vip인 고객의 고객아이디, 고객이름, 나이, 등급으로 구성된 뷰를 
#우수고객이라는 이름으로 생성한 다음 우수고개 뷰의 모든 내용 검색.7-55
create view 우수고객(고객아이디, 고객이름, 나이, 등급)
as select 고객아이디, 고객이름, 나이, 등급
	from 고객
	where 등급 = 'vip'
with check option;

select * from 우수고객;
 #위와 결과 같음
	create view 우수고객
	as select 고객아이디, 고객이름, 나이, 등급
		from 고객
		where 등급 = 'vip'
	with check option;

#제품테이블에서 제조업체별 제품수로 구성된 뷰르 업체별제품수라는 이름으로 생성.업테별제품수 뷰 모든내용 검색.7-56
create view 업체별제품수(제조업체, 제품수)
as select 제조업체,count(*)
	from 제품
	group by 제조업체
with check option;

select * from 업체별제품수;

뷰 활용

: 검색

#우수고객뷰에서 나이가 20세 이상인 고객에 대한 모든 내용 검색
select * from 우수고객 where 나이>=20; 
  

뷰 장점

  • 질의문을 더 쉽게 작성 가능
  • 데이터의 보완 유지에 도움됨
  • 데이터를 좀 더 편리하게 관리

뷰 삭제

drop view 뷰이름;

삽입 SQL

지금까지 sql문은 DBMS에 대화식으로 직접 입력해 수행 결과를 바로 확인. 응용프로그램 안에 삽입하여 사용할 수도 있는데 이를 삽입 SQL(ESQL)이라고 함.

  • 일반 명령문이 위치할 수 있는 곳이면 어디든 삽입할 수 있다.
  • 일반 명령문과 구별을 위해 앞에 exec sql을 붙임
  • 프로그램에 선언된 일반 변수를 삽입 sql에서 사용 가능. 사용시 콜론 (:)을 붙여 테이블이름이나 속성이름과 구분.

select문 사용시 커서가 수행결과로 반환된 여러 행을 한 번에 하나씩 가리키는 포인터 역할을 함.

프로그램에서는 여러 행을 한꺼번에 처리할 수 없어 커서로 한 행씩 차례로 처리.

커서가 필요 없는 삽입 SQL

결과 테이블을 반환하지 않는 즉 행 하나만 반환하는 selec문 (create table, insert, delete, update).

#사용자가 제품번호를 입력시 제품 테이블에서 입력한 제품번호에 해당하는 제품명과 단가를 검색하여 출력.c언어 프로그램.그림7-14
int main() {
//사용할 변수 미리 선언
	exec sql begin declare section;
		char p_no[4], p_name[21];
		int price;
	exec sql begin declare section;
	
//검색하고자 하는 제품의 제품번호 입력받기
	printf("제품번호를 입력하세요:")
	scanf("%s",p_no);

//검색해 변수에 저장하는 삽입 sql문
//서로다른 제품은 같은 제품번호를 가질수 없어 select뭉른 하나의 행을 결과로 반환 -> 커서가 필요없음
	exec sql select 제품명,단가 into :p_name, :price  //검색결과를 저장할 변수를 into 다음에 나열.exec sql붙이기
		from 제품
		where 제품번호 = p_no;

//제품명, 단가 출력
	printf("\\n 제품명 = %s",p_name); 
	printf("\\n 단가 = %d",price);

	return 0;
}

커서가 필요한 삽입 SQL

select 문의 실행 결과로 여러 행이 검색되는 경우 한 번에 한 행씩 차례로 접근하게 해주는 커서필요.

  1. 커서사용전 먼저 커서의 이름과 커서가 필요한 select문 선언.
  2. exec sql declare 커서이름 cursor for select문;
  3. 커서에 연결된 select문 실행위의 open 명령어로 select문 실행시 검색된 행들이 반환되고 커서는 검색된 행들 중 첫 행의 앞에 위치함.
  4. exec sql open 커서이름;
  5. fetch로 커서를 이동해 처리할 다음 행을 가리키고 해당 행의 속성값들을 변수에 저장.exec sql fetch 커서이름 into 변수리스트;
  6. 여러 행이 존재해 여러번 수행해야 함으로 반복문과 함께 사용.
  7. 커서를 더 사용하지 않을 때 close
  8. exec sql close 커서이름;
// 1.제품테이블에서 제품명과 단가를 모두 검색하는 select문을 위한 커서를 product_cursor라는 이름으로 선언
exec sql declare product_cursor cursor for
	select 제품명, 단가 from 제품;

//2.커서에 연결된 select문 실행
exec sql open product_cursor;

//3.커서를 이동해 결과 테이블의 다음 행에 접근해 제품명 속성의 값을 p_name변수에 저장하고 단가속성값을 price변수에 저장.
exec sql fetch product_cursor into :p_name, :price;

//4.커서 사용하지 않음
exec sql close product_cursor;

TCL Transection(작업 단위) Control Language

Comit(작업완료), rollabck(복구, 작업 취소)

Ex) 돈이체: A통장에서 빼고 / B통장에 더하기

All or nothing (작업을 끝까지 다하거나 아니면 되돌아감. 복구)

 

 

'IT' 카테고리의 다른 글

[ UI/UX ] 02. UX의 이해  (0) 2023.02.15
[ UI/UX ] 01. UI의 이해  (0) 2023.02.15
DML  (0) 2023.02.03
DB 언어 SQL - DDL  (0) 2023.02.03
관계 데이터 모델  (0) 2023.02.03