[데이터베이스] 16. 뷰와 삽입 SQL
1. 뷰와 삽입 SQL 예문
1) 삽입 SQL의 개념
• 데이터베이스에 새로운 레코드(행)를 추가하는 데 사용되는 SQL 명령문으로, 데이터베이스 테이블에 새로운 데이터를 입력하고 저장하는 데 사용됨.
2) 삽입 SQL의 구문
• INSERT INTO 테이블명 (열1, 열2, ...) VALUES (값1, 값2, ...);
- 테이블명: 데이터를 삽입할 대상 테이블의 이름
- 칼럼1, 칼럼2, 칼럼3,...: 데이터를 삽입할 칼럼들의 이름
- 값1, 값2, 값3,...: 해당 칼럼들에 삽입할 실제 값들
3) 삽입 SQL의 특징
• 데이터 입력: 삽입 SQL은 새로운 데이터를 데이터베이스 테이블에 입력하는 데 사용됨.
• 고유성 제약 조건: 데이터베이스는 중복된 데이터를 허용하지 않으며, 중복 삽입 시 오류 발생 가능.
• 트랜잭션 지원: 삽입 SQL은 데이터베이스 트랜잭션 내에서 사용 가능하여, 여러 삽입 작업을 하나의 논리적 단위로 묶을 수 있음.
• 데이터 유효성 검사: 데이터 삽입 전에 데이터의 유효성을 검사하고 필드 유형 및 길이 제한을 준수해야 함.
4) 삽입 SQL의 장점
• 간단하고 직관적: 데이터베이스에 새로운 레코드를 추가하는 간단하고 직관적인 방법 제공.
• 높은 유연성: 다양한 데이터 유형 및 테이블 구조에 대해 유연하게 적용 가능.
• 효율적인 데이터 삽입: 대량의 데이터를 한 번에 삽입할 수 있어 대규모 데이터베이스 작업에 유용.
5) 삽입 SQL의 단점
• 보안 문제: SQL 삽입 공격에 취약할 수 있으며, 적절한 보안 조치가 필요함.
• 성능 문제: 대량의 데이터를 삽입할 때 성능 저하 가능성이 있음.
• 데이터 무결성 위험: 부적절한 데이터 삽입으로 인해 데이터 무결성 문제가 발생할 수 있음.
6) 삽입 SQL의 공격: 보안 문제
• 악의적인 사용자가 웹 애플리케이션 또는 데이터베이스 시스템에 공격을 시도하는 방법 중 하나로, 사용자 입력을 통해 SQL 쿼리를 조작하여 데이터베이스에
접근하거나 수정하는 행위를 의미함.
7) SQL 삽입 공격 방지 요건
• 입력 검증: 사용자 입력을 검증하여 예상된 형식인지 확인.
• 매개변수화된 질의 사용: SQL 쿼리를 생성할 때 매개변수를 사용하여 직접 입력되지 않도록 함.
• 권한 제어: 최소한의 권한만 부여하여 데이터베이스 접근을 제한함.
• 보안 업데이트: 데이터베이스 및 웹 애플리케이션 소프트웨어를 최신 버전으로 유지하고 보안 패치를 적용해야 함.
8) 커서가 필요한 삽입 SQL
• 커서(cursor): 수행 결과로 반환된 여러 행을 한 번에 하나씩 가리키는 포인터.
• 커서를 사용하는 이유: 여러 개의 행을 반환하는 SELECT 문을 프로그램에서 사용할 때 필요함.
• 커서 선언 형식:
EXEC SQL DECLARE 커서_이름 CURSOR FOR SELECT 문;
• 명시적(Explicit) 커서: 사용자가 선언 후 사용하는 SQL 커서.
• 묵시적(Implicit) 커서: 오라클에서 자동으로 선언하는 SQL 커서.
9) 커서를 이동시키는 삽입 SQL문
• 커서를 이동하여 다음 행을 가리키고, 해당 행의 속성 값을 변수에 저장
• 반복문(for, while)과 함께 사용 가능
• 커서 이동 형식:
EXEC SQL FETCH 커서_이름 INTO 변수_리스트;
10) 커서 사용 종료
• 커서를 닫는 명령어:
EXEC SQL CLOSE 커서_이름;
11) 커서가 필요 없는 삽입 SQL
• 단일 레코드 검색, 삽입, 수정, 삭제 시 사용
• 단순한 INSERT, DELETE, UPDATE 문에서 커서 없이 실행 가능
• 예제:
INSERT INTO 테이블이름 (열1, 열2, 열3) VALUES (값1, 값2, 값3);
2. 뷰(View)의 활용
1) 뷰의 활용
• 임시 테이블 생성:
CREATE TABLE TB_EMP AS SELECT employee_id, first_name, salary_fee FROM employees;
• VIEW 생성 및 확인:
CREATE OR REPLACE VIEW ST_VIEW(empno, ename, sal) AS
SELECT employee_id, first_name, salary_fee FROM TB_EMP
WITH READ ONLY;
• WITH READ ONLY: 읽기 전용 뷰 설정
• WITH CHECK OPTION: CHECK 제약 조건 적용
2) 뷰 활용 예제
• 뷰에 데이터 삽입:
INSERT INTO ST_VIEW(empno, ename, sal) VALUES (101, '세종대왕', 10000);
• 뷰를 이용한 데이터 조회:
SELECT * FROM ST_VIEW;
3) 조인 및 뷰 활용
• 사원번호, 이름, 부서번호, 부서명, 지역명을 포함하는 뷰 생성:
CREATE OR REPLACE VIEW DEPT_EMP_LOC_VIEW AS
SELECT e.employee_id, e.first_name, d.department_id, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;
4) 삽입 SQL 예제
• 명시적 커서 활용:
DECLARE
emp_id NUMBER(3);
emp_name VARCHAR2(8);
emp_salary NUMBER(10);
CURSOR cul IS SELECT empno, ename, sal FROM emptest1 WHERE deptno = 30;
BEGIN
OPEN cul;
LOOP
FETCH cul INTO emp_id, emp_name, emp_salary;
EXIT WHEN cul%NotFound;
DBMS_OUTPUT.PUT_LINE(emp_id || ' ' || emp_name || ' ' || emp_salary);
END LOOP;
CLOSE cul;
END;
이 내용은 휴넷사회복지평생교육원의 데이터베이스 강의를 듣고 정리한 것입니다.