카테고리 없음

7/12 SQL문

달래dallae 2022. 7. 12. 18:58

DML(Data Manipulation Language)

DML 문은 기본적으로 수동 commit

즉, DML 문을 수행한 다음에는 바로 디스크(파일)에 적용되지 않고 commit 해야만 적용

DML 문을 수행한 다음에 디스크(파일)에 적용치 않고자 한다라면 rollback

1. insert

데이터 입력

insert into 테이블명(컬럼명1,컬럼명2,...) values(값1,값2,...);

1) Unconditional(조건 X) insert all

insert all 
into 테이블명1(컬럼명1, 컬럼명2, ...)
values(SubQuery문컬럼명1, SubQuery문컬럼명2, ...)

into 테이블명2(컬럼명3, 컬럼명4, ....)
values(SubQuery문컬럼명1, SubQuery문컬럼명2, ...) 

SUB Query문;

2) Conditional(조건 O) insert all

조건(where절)에 일치하는 행들만 특정 테이블로 찾아가서 insert

insert all
when SUB Query안 컬럼명의 조건1 then
into 조건에 맞는 테이블명1(컬럼명1, 컬럼명2...)
values (SubQuery문컬럼명1, SubQuery문컬럼명2, ...)

when SUB Query안 컬럼명의 조건2 then
into 조건에 맞는 테이블명2(컬럼명1, 컬럼명2...)
values (SubQuery문컬럼명1, SubQuery문컬럼명2, ...)
SUB Query문;

2. update

데이터 수정


3. delete

데이터 삭제


4. merge

데이터 병합

어떤 2개 이상의 테이블에 존재하는 데이터를 다른 테이블 한 곳으로 모으는 것

insert와 update를 합친 것

생성된 모든 데이터베이스 링크 조회

select * from user_db_links;

데이터베이스 링크 삭제

drop database link 데이터베이스링크명

데이터베이스링크 테이블 조회

select
from 테이블명@데이터베이스링크명

메인DB에서 merge테이블 생성

create table tbl_merge
(컬럼명1..
,constraint PK_tbl_merge primary key(컬럼명1)
);

로컬DB테이블 ⇒ 메인DB 테이블로 병합

merge into 메인DB테이블@메인DB데이터베이스링크명 R
using 로컬DB테이블 L
on (L.프라이머리키컬럼 = R.프라이머리키컬럼)
when matched then 
		 update set R.컬럼 = L.컬럼...
when not matched then
		 insert (R.컬럼...) values(L.컬럼...)

TCL (Transaction Control Language)

commit, rollback

Transaction

관련된 일련의 DML로 이루어진 한세트, 서로 다른 DML문이 1개의 작업을 이룰 때

예>글쓰기(insert) ⇒점수+10(update) insert와 update가 한세트

데이터베이스의 상태를 변환시키기 위해 논리적 기능을 수행

모든 DML문이 성공해야만 최종적으로 모두 commit, 1개라도 실패하면 모두 rollback

Rollback to Savepoint

특정시점까지 rollback 가능

savepoint 세이브포인트명
rollback to savepoint 세이브포인트명

그냥 rollback ⇒ commit한 이후로 실행된 모든 DML문을 롤백


DDL(Data Definition Language)

데이터 정의어

auto commit ⇒ DDL문 이전에 commit을 하지 않은 DML문까지 전부 commit됨(rollback 안됨)

create, drop, alter, truncate

truncate

truncate table 테이블명

테이블에 존재하던 모든 행을 삭제

테이블 완전초기화(water mark 삭제)

auto commit ⇒ rollback 불가

cf> delete ⇒ select시 water mark(insert되었던 흔적)까지 다 읽어옴, rollback 가능


DCL(Data Control Language)

데이터 제어어

grant

권한을 부여하는 명령어

grant connect, resource, create view, unlimited tablespace to 오라클계정명

1) 관리자계정 ⇒ 다른계정에 권한주기

grant create session to 오라클계정명 --오라클서버 접속권한
grant create table to 오라클계정명 --테이블 생성권한
...

2) 일반계정 ⇒ 다른 계정에게 권한 주기

grant select on 자기계정테이블명 to 오라클계정명
grant update on 자기계정테이블명 to 오라클계정명
grant delete on 자기계정테이블명 to 오라클계정명
...
또는
grant select,update,delete on 자기계정테이블명 to 오라클계정명

revoke

권한을 회수하는 명령어

1) 관리자계정 ⇒ 다른계정에 준 권한회수

revoke create session from 오라클계정명...

2) 다른계정에게 준 권한 뺏기

revoke select on 자기계정테이블명 from 오라클계정명
revoke update on 자기계정테이블명 from 오라클계정명
revoke delete on 자기계정테이블명 from 오라클계정명
또는
revoke select,update,delete on 자기계정테이블명 from 오라클계정명

오라클계정 생성

alter session set "_ORACLAE_SCRIPT" = true
create user 오라클계정명 identified by 암호 default tablespace users

오라클계정 삭제

drop user 오라클계정명 cascade

오라클계정을 삭제하기위한 전제조건 ⇒ 오라클계정으로 생성된 데이터베이스 객체가 존재하지 않을 때

일일이 삭제하기 어려움 ⇒ cascade 옵션으로 모든 객체를 먼저 제거해주고 나서 오라클계정을 삭제한다.