ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • day09 - 오라클 (sql 명령어, insert, delete, truncate, drop 차이, merge, commit, DML)
    KIC/DB 오라클 2021. 7. 10. 23:31
    반응형

    [SQL 명령어들]

    DML(Data Manipulation Language): INSERT(입력), UPDATE(변경), DELETE(삭제), MERGE(병합)

     

    DDL(Data Definition Language): CREATE (생성), ALTER (수정), TRUNCATE (잘라 내기), DROP (삭제)

     

    DCL (Data Control Language): GRANT (권한 주기), REVOKE (권한 뺐기)

     

    TCL (Transaction Control Language): COMMIT (확정), ROLLBACK(취소)

     

    SELECT : 어떤 분류에서는 DQL (Data Query Language) 라고 하기도 함

     

    INSERT: 데이터 입력 명령어

    INSERT INTO table licolumn1, column2,......)]

    VALUES (value 1, value 2.....);

     

     

    ex)

    -- 데이터 하나 추가

    --컬럼명을 적어줄 수 도 안적어 줄 수도 있다.

    - 컬럼을 적어주면 적어준 컬럼에만 데이터가 들어가고 생략하면 전체 컬럼을 아래에 입력 해야함

    INSERT INTO dept2(dcode, dname, pdept, area) 

    VALUES (9000, '특판1', 1006', '임시지역');

     

    -- 이렇게 없이도 가능

    INSERT INTO dept2

    VALUES(9001, '특판2', '1006', '임시지역');

     

     

     

     

     

    --ex)

    -- 특정 칼럼만 입력했을 때

    insert into dept2(dcode, dname, pdept)

    values(9002, '특판3', '1006');

     

    결과 화면

     

    -> 값이 4개중 3개만 넣었기 때문에 마지막 값은 null로 들어간다.

     

     

     

    [insert 여러 행 입력]

    --1.

    create table professor2 as select * from professor;

     

    --2.

    create table professor3 as select * from professor where 1 = 2;

    --확인

    select * from professor2;

    select * from professor3;

     

    --3.

    insert into professor3

    select * from professor;

     

    -> 첫번째 꺼는 professor와 동일한 틀을 만들고 professor의 기존 자료가 모두 들어간다.

    -> 두번째 꺼는 틀만 만들기 위해서 값은 안 넣으려고 일부러 거짓인 where 조건문을 작성

    -> 이후 세번쨰 쿼리를 이용해서 빈 틀에 professor의 모든 값을 저장

     

     

     

     

    [delete, truncate, drop 차이]

    [delete]

    -> delete는 트랜잭션 처리를 하지만 truncate는 그렇지 않는다.

    -> delete는 삭제되어도 테이블 용량이 줄지 않고, 삭제 후에 잘못 삭제한 것을 되돌릴 수 있다.

    -> table이나 cluster에 행이 많으면 행이 삭제될 때마다 많은 system자원이 소모된다.

    -> commit 이전에는 롤백이 가능하다.

    -> 록백정보를 기록하므로 truncate에 비해서 느리다.

    -> 전체 또는 일부만 삭제 가능하다.

    -> 삭제 행수를 반환 한다.

     

    [truncate]

    -> truncate table

    -> 테이블을 최초 생성된 초기상태로 만든다.

    -> 용량이 줄어들고, 인덱스 등도 모두 삭제

    -> 롤백이 불가능 하다.

    -> 무조건 전체 삭제만 가능

    -> 삭제 행수를 반환 하지 않는다.

     

    [drop table]

    -> 테이블 구조를 제거하는 것

    -> 기존 테이블의 존재를 제거한다. (테이블의 정의 자체를 제거한다.)

    -> 롤백이 불가능하다.

    -> 테이블이 사용했던 storage는 모두 release처리 된다.

     

     

     

     

     

     

    [merge]

    -> 테이블 합치기

     

    --merge

    merge into p_total total

    using pt_01 p01

    on (total.판매번호 = p01.판매번호)

    when matched then

    update set total.제품번호 = p01.제품번호

    when not matched then

    insert values(p01.판매번호, p01.제품번호, p01.수량, p01.금액);

     

    -> p_total에 값이 없기 때문에 p01 값이 그대로 insert 될 것

     

     

     

     

     

     

     

     

    --merge p02

    merge into p_total total

    using pt_02 p02

    on (total.판매번호 = p02.판매번호)

    when matched then

    update set total.제품번호 = p02.제품번호

    when not matched then

    insert values(p02.판매번호, p02.제품번호, p02.수량, p02.금액);

    -> p_total sqlplus에서 확인해보면 아직 커밋이 안된 것을 확인할 수 있다.

    -> 다른 테이블 두개를 연결한 것이기 때문

     

     

     

     

    [commit]

    -> 기존 delete는 수행해도 커밋을 자동으로 하지 않는다.

    -> DDL을 만나면 자동 오토 commit이 된다.

    -> 정상적인 exit 한 경우 자동 커밋

     

    --커밋용 ddl

    create table rolluptest(

    num number(10),

    name varchar2(2()));

    -> 위의 DDL 문을 수행했더니 이전에 없던 p_total 테이블이 커밋되어 출력된다.

     

     

     

     

     

     

     

     

     

    --DML 예제

    insert into rolluptest values

    (round(dbms_random.values(1,45),0),

    dbms_random.String('A',9));

     

    -> DML로 랜덤값을 추가해주었지만

    -> DML만 만났을 땐 커밋이 되지 않아 SQLPLUS에서는 출력이 되지 않는 것을 확인할 수 있다.

     

     

     

     

     

    [savepoint]

    -> savepoint: 트랜잭션을 여기까지 수행하겠다.

    -> 4개를 insert하고 savepoint를 적용한 후에 2개를 추가로 insert했을 때

    --insert

    insert into rolluptest values

    (round(dbms_random.value(1,45),0),

    dbms_random.String('A',9));

    select * from rolluptest;

    --2개까지 insert하고 savepoint

     

     

     

    --2개 추가로 insert

     

     

     

     

    rollback to a1;

    -> 기존에 4개가 select 되었으나 롤백 이후에 savepoint가 지정되었던 2개로 롤백되어 출력된다.

     

     

    300x250

    댓글

Designed by Tistory.