DB-DML

NOOOOOOOOOOO·2023년 9월 30일

DB

목록 보기
6/25

DML

  1. Data Manipulation Language
  2. 데이터(행, Row)를 조작(삽입, 수정, 삭제)하는 언어이다.
  3. 트랜잭션 대상이다.(작업이 완료되면 COMMIT, 작업을 취소하려면 ROLLBACK이 필요한다.)
    1) COMMIT : 작업을 저장한다. COMMIT이 완료된 작업은 ROLLBACK으로 취소할 수 없다.
    2) ROLLBACK : 작업을 취소한다. COMMIT 이후 작업을 취소한다.
  4. 종류
    1) 삽입 : INSERT INTO VALUES
    2) 수정 : UPDATE SET WHERE
    3) 삭제 : DELETE FROM WHERE

참고.
(자격증에서는 DML의 범주를 INSERT,UPDATE,DELETE + SELECT로 보기도 한다.)

INSERT

INSERT INTO 테이블명[(칼럼1,칼럼2...)]VALUES(값1,값2 ...);

시퀀스SEQUENCE

순차적으로 증가하는 일련의 번호를 생성하는 DB객체 (EX 번호표 기계)

시퀀스 생성

CREATE SEQUENCE 시퀀스명
[INCREMENT BY N]--N씩 증감
[START WITH N]--시작값 N
[MAXVALUE N|NOMAXVALUE]--최댓값N|최댓값 없음
[MINVALUE N|NOMINVALUE]--최소값N|최소값 없음
[CYCLE|NOCYCLE]--번호순환O|번호순환X
[CACHE N|NOCACHE]--메모리케시사용O|메모리케시 사용X(N만큼 미리 준비해둠 )
[ORDER|NOORDER]--,순차번호사용O|순차번호사용X

시퀀스 함수

CURRVAL :
-생성한 현재 번호확인
-NEXTVAL 호출이 한번도 없는경우 사용불가
-시퀀스명.CURRVAL

NEXTVAL :
-시퀀스로 새로운 번호를 생성
-최초 시퀀스 사용시 반드시 NEXTVAL 함수를 먼저 사용
-시퀀스명.NEXTVAL

CURVAL,NEXTVAL :
-INSERT문이나 UPDATE문에서 사용
-서브쿼리,GROUP BY,HAVING ,ORDERBY,DISTINCT 와 함께 사용 불가

트랜잭션

-DB에서 처리되는 여러 SQL 명령들을 하나의 논리적 작업 단위로 처리하는 것
-작업이 시작되면 중간에 멈추지 않고 ,반드시 종료해하는 작업단위
-작업 도중 하나라도 실패하면 모두 철회.

TCL(Trasaction Control Language)

COMMIT

트랜잭션내의 모든 SQL 실행으로 인해 변경된 작업 내용을 디스크에 영구적으로 저장하고 트랜잭션을 종료

ROLLBACK

트랜잭션내의 모든 SQL 실행으로 인해 변경된 작업 내용을 모두 취소하고 트랜잭션을 종료

COMMIT이 필요한 SQL>INSERT,UPDATE,DELETE(커밋을 하지 않으면 데이터베이스에 저장되지 않음)

1.테이블 삭제/생성

-- 테이블 삭제
DROP TABLE EMPLOYEE_T;
DROP TABLE DEPARTMENT_T;

-- DEPARTMENT_T 테이블 생성
CREATE TABLE DEPARTMENT_T (
    DEPT_NO   NUMBER            NOT NULL
  , DEPT_NAME VARCHAR2(15 BYTE) NOT NULL
  , LOCATION  VARCHAR2(15 BYTE) NOT NULL
  , CONSTRAINT PK_DEPART PRIMARY KEY(DEPT_NO)
);

-- EMPLOYEE_T 테이블 생성
CREATE TABLE EMPLOYEE_T (
    EMP_NO    NUMBER            NOT NULL
  , NAME      VARCHAR2(20 BYTE) NOT NULL
  , DEPART    NUMBER            NULL
  , POSITION  VARCHAR2(20 BYTE) NULL
  , GENDER    CHAR(2 BYTE)      NULL
  , HIRE_DATE DATE              NULL
  , SALARY    NUMBER            NULL
  , CONSTRAINT PK_EMPLOYEE PRIMARY KEY(EMP_NO)
  , CONSTRAINT FK_DEPART_EMP FOREIGN KEY(DEPART) REFERENCES DEPARTMENT_T(DEPT_NO) ON DELETE SET NULL
);

2.부서번호를 생성하는 시퀀스 만들기

DROP SEQUENCE DEPT_SEQ;
CREATE SEQUENCE DEPT_SEQ
    INCREMENT BY 1  -- 1씩 증가하는 번호를 만든다.(디폴트)
    START WITH 1    -- 1부터 번호를 만든다.(디폴트)
    NOMAXVALUE      -- 번호의 상한선이 없다.(디폴트)
    NOMINVALUE      -- 번호의 하한선이 없다.(디폴트)
    NOCYCLE         -- 번호 순환이 없다.(디폴트)
    CACHE 20        -- 20개씩 번호를 미리 만들어 둔다.(디폴트)
    NOORDER         -- 번호를 순서대로 사용하지 않는다.(디폴트) - 번호를 순서대로 사용하는 ORDER 옵션으로 바꿔서 시퀀스를 생성한다.
    ;

3. Insert로 부서테이블에 데이터 삽입

INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '영업부', '대구');
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '인사부', '서울');
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '총무부', '대구');
INSERT INTO DEPARTMENT_T(DEPT_NO, DEPT_NAME, LOCATION) VALUES(DEPT_SEQ.NEXTVAL, '기획부', '서울');
COMMIT;

4. 사원번호 생성 시퀀스

DROP SEQUENCE EMP_SEQ;
CREATE SEQUENCE EMP_SEQ
    START WITH 1001
    ORDER;

5. 사원 데이터 삽입

INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '구창민', 1, '과장', 'M', '95-05-01', 5000000);  -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '김민서', 1, '사원', 'M', '17-09-01', 2500000);  -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '이은영', 2, '부장', 'F', '90/09/01', 5500000);  -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
INSERT INTO EMPLOYEE_T(EMP_NO, NAME, DEPART, POSITION, GENDER, HIRE_DATE, SALARY) VALUES(EMP_SEQ.NEXTVAL, '한성일', 2, '과장', 'M', '93/04/01', 5000000);  -- 날짜는 하이픈(-) 또는 슬래시(/)로 구분
COMMIT;

수정(UPDATE)

작성형식

    UPDATE 테이블
    SET 업데이트할내용, 업데이트할내용, ...
    WHERE 조건식

UPDATE 예시

-- 1. 부서번호가 3인 부서의 지역을 '인천'으로 변경하시오.
UPDATE DEPARTMENT_T
   SET LOCATION = '인천'  -- SET절의 등호(=)는 대입연산자
 WHERE DEPT_NO = 3;  -- WHERE절의 등호(=)는 동등비교연산자

-- 2. 부서번호가 2인 부서에 근무하는 모든 사원들의 연봉을 500000 증가시키시오.
UPDATE EMPLOYEE_T
   SET SALARY = SALARY + 500000
 WHERE DEPART = 2;

삭제(DELETE)

DELETE 형식

DELETE
      FROM 테이블
     WHERE 조건식

DELETE 예시

-- 1. 지역이 '인천'인 부서를 삭제하시오. ('인천'에 근무하는 사원이 없다.)
DELETE
  FROM DEPARTMENT_T
 WHERE LOCATION = '인천';

-- 2. 지역이 '서울'인 부서를 삭제하시오. ('서울'에 근무하는 사원이 있다. -> ON DELETE SET NULL 외래키 옵션에 의해서 해당 사원들의 부서정보가 NULL 값으로 처리된다.)
DELETE
  FROM DEPARTMENT_T
 WHERE LOCATION = '서울';

티스토리
-DML(학생,교수,강의,수강신청,과목)
https://hyeonju50.tistory.com/18

0개의 댓글