본문 바로가기
DB/SQL_Example

DML(Data Manpulation Language)

by Mr.DonyStark 2024. 1. 22.
ALTER SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

□ 테이블에 새로운 데이터를 입력하거나 기존 데이터를 수정 또는 삭제하기 위한 명령어

 종류

  ○ INSERT : 새로운 데이터 입력 명령어

    - INSERT INTO table [(column [, column…])]
      VALUES (value [, value…]);

insert into student 
values(10110, '홍길동', 'hong', '1', '8501011143098', '85/01/01', '041)638-314', 170, 70, 101, 9903);

--null입력 : 데이터 삽입을 할 필드명만 기재하여 코드작성
insert into department(deptno, dname)
values(300,'생명공학부');

--날짜형식
insert into professor(profno, name, position, hiredate, deptno)
values (9920, '최윤식', '조교수' TO_DATE('2006/01/01', 'YYYY/MM/DD'), 102);

--다중행 입력 : student 테이블의 값을 height_info 테이블에 모두 적재
insert all
into height_info values(studno,name,height)
select studno, name, height, weight from student
where grade>='2';

--Conditional : 특정테이블에 있는 데이터를 조건에 맞는 데이터만 각 테이블로 적재
insert all
when height > 170 then into height_info values(studno, name, height)
when weight > 70 then into weight_info values(studno, name, weight)
select studno, name, height, weight
from student
where grade >= '2';


  ○ UPDATE : 기존 데이터 수정 명령어

    - UPDATE table
      SET column=value [, column=value, …]
      [WHERE condition];

--일반
update professor
set position = '부교수'
where profno = 9903;

--서브쿼리
update student 
set(ggrade, deptno) = (select grade, deptno from student where studno = 10103)
where studno = 10201;


  ○ DELETE : 기존 데이터 삭제 명령어

    - DELETE [FROM] table [WHERE condition1];

--단일행
delete from student where studno = 10103;

--서브쿼리
delete from student
where deptno = (select deptno from department where dname = '컴퓨터공학과');


  ○ MERGE : 두개의 테이블을 하나의 테이블로 병합하는 명령어

    - 구조가 같은 두개의 테이블을 비교하여 하나의 테이블로 합치기 위한 데이터 조작어
    - WHEN 절의 조건절에서 결과 테이블에 해당 행이 존재하면
    - UPDATE 명령문에 의해 새로운 값으로 수정,그렇지 않으면
    - INSERT 명령문으로 새로운 행을 삽입
    - 대량의 데이터를 분석하기 위한 업무에 유용

    - MERGE INTO [table][alias]
      USING [table | view | subquery]alias
      ON[join condition]
      WHEN MATCHED THEN
      UPDATE SET ……
      WHEN NOT MATCHED THEN
      INSERT INTO ……
      VALUES ……;

     * MERGE INTO : 하나의 테이블로 합치기 위한 결과 테이블
     * USING : 테이블, 뷰, 서브쿼리에 대한 별명 지정
     * ON : 조인 조건 지정
     * WHEN MATCHED THEN : ON 절의 조인 조건을 만족하는 행 존재하면 지정된 값으로 행을 UPDATE
     * WHEN NOT MATCHED THEN:ON 절의 조인 조건을 만족하지 않을 경우 새로운 행으로 INSERT
     * WHEN MATCHED THEN 절과 WHEN NOT MATCHED THEN 절에서는 테이블이나 뷰 이름 대신에 USiNG 절에서 지정한 별명 사용

merge into professor p
using professor_temp f
on (p.profno = f.profno)
when matched then
update set p.position = f.position
where not matched then
insert values(f.profno, f.name, f.userid, f.position, f.sal, f.hiredate, f.comm, f.deptno);

 

 트랜잭션

  ○ 관계형 데이터베이스에서 실행되는 여러 개의 SQL 명령문을 하나의 논리적 작업 단위로 처리하는 개념

  ○ 여러 개의 명령문을 하나의 논리적인 작업단위로 처리하는 기능
  ○ 트랜잭셔 관리 명령어
    - COMMIT : 트랜잭션의 정상적인 종료를 위한 명령어

      → 하나의 트랜잭션에서 실행되는 모든 SQL 명령문의 처리 결과가 하드디스크에 안전하게 보장되는 것을 보장
      → 처리 결과를 디스크에 영구적으로 저장
      → 해당 트랜잭션에 할당된 CPU, 메모리 같은 자원이 해제
      → 서로 다른 트랜잭션을 구분하는 기준
      → COMMIT 명령문 실행하기 전에 하나의 트랜잭션 변경한 결과를 다른 트랜잭션에서 접근할 수 없도록 방지하여 일관성 유지
    - ROLLBACK : 트랜잭션의 비정상적인 중단을 위한 명령어

      → 하나의 트랜잭션에서 실행된 SQL 명령문의 처리결과를 취소
      → CPU,메모리 같은 해당 트랜잭션에 할당된 자원을 해제, 트랜잭션을 강제 종료

 

□ 시퀀스

  ○ 유일한 식별자
  ○ 기본 키 값을 자동으로 생성하기 위하여 일련번호 생성 객체
  ○ 예를 들면, 웹 게시판에서 글이 등록되는 순서대로 번호를 하나씩 할당하여 기본키로 지정하고자 할때 시퀀스를 편리하게 이용
  ○ 여러 테이블에서 공유 가능

CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

    - INCREMENT BY n : 시퀀스 번호의 증가치로 기본은 1, 일반적으로 –1사용
    - START WITH n : 시퀀스 시작번호, 기본값은 1
    - MAXVALUE n : 생성 가능한 시퀀스의 최대값
    - MAXVALUE n : 시퀀스 번호를 순환적으로 사용하는 cycle로 지정한 경우, MAXVALUE에 도달한 후 새로 시작하는 시퀀스값
    - CYCLE | NOCYCLE : MAXVALUE 또는 MINVALUE에 도달한 후 시퀀스의 순환적인 시퀀스 번호의 생성 여부 지정
    - CACHE n | NOCACHE : 시퀀스 생성 속도 개선을 위해 메모리에 캐쉬하는 시퀀스 개수, 기본값은 20

  ○ CURRVAL : 시쿼스에서 생성된 현재번호 확인

  ○ NEXTVAL : 시퀀스에서 다음 번호 생성

  ○ CURRVAL, NEXTVAL 

    - INSERT, UPDATE 문에서 사용

    - 서브쿼리, GROUP BY, HAVING, ORDER BYm DISTINCR와 함께 사용할 수 없음, 컬럼의 기본값으로 사용불가

sequence.CURRVAL
sequence.NEXTVAL

 

  ○ 시퀀스 정의 변경

ALTER SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

 

  ○ 시퀀스 삭제

drop sequence s_seq;

'DB > SQL_Example' 카테고리의 다른 글

데이터 무결성(By Oracle)  (0) 2024.01.22
테이블 관리(By Oracle)  (0) 2024.01.22
서브쿼리 (By Oracle)  (0) 2024.01.22
조인함수 (By Oracle)  (0) 2024.01.22
그룹함수 (by Oracle)  (1) 2024.01.22