6_oracle_DML, DCL, TCL

study/Oracle · 2019. 11. 22. 08:32

@제약조건추가

- ALTER TABLE 테이블명 ADD 제약조건(PK, FK, U, CH)

- ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL;

@테이블 제약조건 확인

SELECT *

FROM USER_CONSTRAINTS UC

JOIN USER_CONS_COLUMNS UCC USING(CONSTRAINT_NAME)

WHERE UC.TABLE_NAME = '테이블명';

DML(Date Manipulation Language) : 데이터 조작언어

테이블에 값을 삽입하거나(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문

1. INSERT

- 새로운 행을 추가하는 구문

-> 테이블의 행 개수 증가

[표현식]

INSERT INTO 테이블명(컬럼명,컬럼명,컬럼명,...)

VALUES (데이터1, 데이터2, 데이터3, ...);

INSERT시 모든 컬럼에 데이터를 추가할 경우 (컬럼명, 컬럼명,...) 생략 가능

#COMMIT

-DCL, 현재까지 작업한 DML 내용을 DB에 반영

★ INSERT시 VALUES 대신 서브쿼리 사용 가능

EX)

INSERT INTO EMP_01 (EMP_ID, EMP_NAME, DEPT_TITLE)

  (SELECT EMP_ID,EMP_NAME,DEPT_TITLE FROM EMPLOYEE

  LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID));

2. INSERT ALL

- INSERT시 서브쿼리가 사용하는 테이블이 같은경우

 두 개 이상의 테이블에 INSERT ALL을 이용하여 한번에 삽입 가능,

 단 서브쿼리의 조건(WHERE)절이 같아야 함

EX)

INSERT ALL

INTO 테이블1 VALUES(컬럼1, 컬럼2, 컬럼3)

INTO 테이블2 VALUES(컬럼1, 컬럼2, 컬럼3)

(SELECT 컬럼1, 컬럼2, 컬럼3, 컬럼4

FROM 공통테이블

WHERE 조건);

EX) 조건형 INSERT ALL

INSERT ALL

WHEN 조건1

THEN INTO 테이블1 VALUES (컬럼1, 컬럼2, 컬럼3)

WHEN 조건2

THEN INTO 테이블2 VALUES (컬럼1, 컬럼2, 컬럼3)

(SELECT 컬럼1,컬럼2,컬럼3 FROM 공통테이블);

 

# ROLLBACK

- DCL, 현재까지 작성한 DML 내용을 DB에 반영하지 않고 다 지워버림(원래 상태로 되돌림)

3. UPDATE

- 테이블에 기록된 컬럼의 값을 수정하는 구문

- 테이블 전체 행의 개수에는 변화가 없다.

[표현식]

UPDATE 테이블명

SET 컬럼명1 = 변경할 값1,

      컬럼명2 = 변경할 값2, ...

     [WHERE 컬럼명 비교연산자 비교값];

-[UPDATE 구문에서 서브쿼리 사용 표현식]

UPDATE 테이블명

SET 컬럼명 = (서브쿼리)

[WHERE ~~~~]

# UPDATE시 변경할 값은 해당 컬럼에 대한 제약조건을 위배되지 않게 해야함

4. MERGE(병합)

- 구조가 같은 두개의 테이블을 하나로 합치는 기능

- 테이블에서 지정하는 조건의 값이 존재하면 UPDATE

-> WHEN MATCHED THEN

- 조건값이 없으면 INSERT

-> WHEN NOT MATCHED THEN

5. DELETE

- 테이블의 행을 삭제하는 구문

-> 테이블 행의 개수가 줄어듦

[표현식]

DELETE FROM 테이블명

[WHERE 컬럼명 비교연산자 비교값];

-> WHERE 절을 설정하지 않으면 테이블의 모든 데이터 삭제됨

-제약조건을 비활성화 시키기

ALTER TABLE 테이블명 DISABLE

CONSTRAINT 제약조건명 CASCADE;

-제약조건을 다시 활성화 시키기

ALTER TABLE 테이블명 ENABLE

CONSTRAINT 제약조건명;

# TRUNCATE

- 테이블의 전체 행을 삭제하는 DDL

- DELETE보다 수행 속도가 빠름

- DB상에 메모리 공간이 확보가 된다.

# COMMIT, ROLLBACK을 사용할 수 있는 경우

-->DML 구문에 대해서만 사용 가능

# DML 구문을 작성하다 DDL 구문을 작성하면 앞에서 작성한 DML 구문이 모두 COMMIT됨

 -> ROLLBACK

DCL(Data Control Language) 데이터 제어 언어

- 데이터베이스, 데이터베이스 객체에 대한 접근권한을 제어(부여,회수)하는 언어

- DCL : GRANT(권한 부여), REVOKE(권한 회수)

- TCL : COMMIT, ROLLBACK, SAVEPOINT

- 권한은 크게 시스템, 객체 권한으로 나뉘어 있음

@ 시스템 권한 부여(GRANT)

- 사용자에게 권한을 부여할 때 사용

[표기법]

GRANT 권한1, 권한2, .... TO 사용자계정명;

@ 시스템 권한 종류

CREATE SESSION : 데이터베이스 접속 권한

CREATE TABLE : 테이블 생성 권한

CREATE VIEW : 뷰 생성 권한

CREATE SEQUENCE : 시퀀스 생성 권한

CREATE PROCEDURE : 프로시져(함수) 생성 권한

CREATE USER : 계정 생성 권한

DROP USER : 계정 삭제 권한

DROP ANY TABLE : 임의의 테이블 삭제 권한

@ 계정의 종류

- 관리자 계정 (SYS AS SYSDBA, SYSTEM)

데이터베이스의 생성과 관리를 담당하는 계정

모든 권한과 책임을 가지는 계정

- 사용자 계정

데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정으로

업무에 필요한 최소한의 권한만을 가지는 것을 원칙으로 함

@ 객체 권한 부여

- 객체 권한 : 특정 DB 객체를 조작할 수 있는 권한을 부여

[표기법]

GRANT 권한종류 [(컬럼명)|ALL

ON 객체명 | ROLE 이름 | PUBLIC

TO 사용자계정명;

@ 객체 권한 종류

권한 종류 설정 객체
SELECT TABLE, VIEW, SEQUENCE
INSERT TABLE, VIEW
UPDATE TABLE, VIEW
DELETE TABLE, VIEW
ALTER TABLE, SEQUENCE
REFERENCES TABLE
INDEX TABLE
EXECUTE PROCEDURE

@ 권한 회수(REVOKE)

[표기법]

REVOKE 권한 종류 ON 객체명 FROM 사용자계정명;

★ ROLE

- 사용자에게 허가할 수 있는 권한들의 집합

- ROLE을 이용하면 권한 부여와 회수에 용이함

★ CONNECT

- 사용자가 데이터베이스에 접속 가능하도록 하기 위한 

CREATE SESSION 권한이 작성되어 있는 ROLE

★ RESOURCE

- CREATE 구문을 통한 객체 생성 권한과 INSERT, UPDATE, DELETE 구문을 

사용할 수 있는 권한을 모아놓은 ROLE

TCL(Transaction Control Language) : 트랜잭션 제어언어

- 데이터베이스의 논리적 연산 단위

- 데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리함

- 트랜잭션의 대상이 되는 SQL : INSERT, UPDATE, DELETE(DML)

★ COMMIT/ ROLLBACK

- COMMIT 또는 ROLLBACK 명령이 입력되기 전 까지는 데이터 변경사항이

메모리 버퍼에 임시 저장되어 있는 상태로 존재

- COMMIT : 메모리 버퍼에 임시 저장된 데이터를 DB에 반영

- ROLLBACK : 메모리 버퍼에 임시 저장된 데이터를 삭제하고 마지막 COMMIT 상태로 돌아감

-★ SAVEPOINT : 저장지점을 정의하면 롤백 할 때 트랜잭션에 포함된 전제 작업을 롤백하는 것이 아닌,

현 시점에서 지정한 SAVEPOINT 까지 트랜잭션 일부만 롤백

[표현법]

SAVEPOINT 임의의세이브포인트명;

ROLLBACK TO 임의의세이브포인트명;

 

 

 

 

 

 

 

'study > Oracle' 카테고리의 다른 글

8_oracle_이론 정리  (0) 2019.11.26
7_oracle_DDL (ALTER, DROP)  (0) 2019.11.23
5_oracle_DDL(CREATE)  (0) 2019.11.21
5_oracle_서브쿼리  (0) 2019.11.20
4_oracle_JOIN  (0) 2019.11.19