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 옵션으로 모든 객체를 먼저 제거해주고 나서 오라클계정을 삭제한다.