24.06.24(월) 오라클 수업 DCL/DML/AUTO COMMIT/AUTO ROLLBACK /INSERT SUBQUERY
하나하나 예시를 만들어서 포스트하고싶은 마음은 간절한데.. 배운 것 복습하기도 시간이 빠듯하네
권한(privilege)
- 특정한 SQL문을 수행할 수 있는 권리
- 시스템 권한 / 객체 권한으로 나뉜다
1. 시스템 권한 : 데이터베이스에 영향을 줄 수 있는 권한(DBA가 준다)
2. 객체 권한 : 객체(테이블)를 사용할 수 있는 권한(객체 소유자 or DBA)
3. ROLE : 유저에게 부여할 수 있는 권한을 모아놓은 객체(관리에 대한 편리성을 위해서 만들어놓은 것)
권한 부여
DCL(Data Control Language)
- GRANT : 권한 부여
- REVOKE : 권한 회수
**CREATE SESSION 권한이 없어서 만들 수 없음
■ 권한부여
DCL(Data Control Language)
- GRANT: 권한 부여
□시스템 권한 부여
◎create session -- 시스템 권한 부여(DBA역할)
GRANT create session TO insa;
-- dba입장에서 권한 줬는지 확인하기
SELECT *
FROM dba_sys_privs
WHERE grantee = 'INSA';
-- 권한 받은 입장에서 받았는지 확인
SELECT * FROM user_sys_privs;
■권한 회수
- REVOKE: 권한 회수
◎create session 시스템 권한 회수
REVOKE create session FROM insa;
◎객체 권한 부여
GRANT select ON hr.employees TO insa;
GRANT create table TO insa;
-- dba입장에서 권한 줬는지 확인하기
SELECT *
FROM dba_tab_privs
WHERE grantee = 'INSA';
- 받은 입장에서 객체 권한 확인(객체권한은 tab으로 표현)
SELECT * FROM user_tab_privs;
-- quota(할당량) 주기
ALTER USER insa
QUOTA UNLIMITED ON users;
-- 받은사람 입장에서 할당량 확인
SELECT * FROM dba_ts_quotas;
◎객체권한 회수
REVOKE select ON hr.employees FROM insa;
# Transaction : 논리적으로 DML을 하나로 묶어서 처리하는 작업단위
** DML을 작성하면 Transaction이 일어남. Transaction을 제어하는 명령어가 TCL!
■DML(Data Manipulation Language)
INSERT(입력), UPDATE(수정), DELETE(삭제), MERGE(입력,수정,삭제)
■TCL(Transaction Control Language)
COMMIT, ROLLBACK, SAVEPOINT
■테이블 생성
CREATE TABLE test1(id number, name varchar2(20), day date)
TABLESPACE users; -- tablespace를 작성하는 습관을 가져야 해
■테이블 삭제
DROP TABLE test1 PURGE;
PURGE: 영구히 삭제하겠다는 뜻.(PURGE옵션을 주지 않으면 복원할 수 있음.)
■ INSERT문
테이블에 새로운 행을 입력하는 SQL문
INSERT INTO insa.test(id, name, day)
VALUES(1, 'scott', to_date('2024-06-24','yyyy-mm-dd'));
■UPDATE
-특정한 필드값을 수정하는 SQL문
--꼭 WHERE절에 제한해야 해! 어디를 수정할건데?
UPDATE insa.emp
SET name = 'paul'
WHERE id = 1; --transaction 시작
■DELETE
행을 삭제하는 SQL문(꼭 WHERE조건절을 달아야 해!! 아니면 테이블 다 삭제가 될 수 있어!)
DELETE FROM insa.emp
WHERE id=1;
■ AUTO COMMIT
- 왜 발생하지?
딕셔너리 테이블의 내부적으로 트랜잭션을 수행하고 있기때문에
예를 들면 CREATE를 하면 내부적으로 dictionary로 INSERT가 이루어지고 이음(제귀호출) 그리고 commit작업까지 이루어지니까 auto commit이 내부적으로 발생하는거야.
- 자동 커밋되는 4가지 경우
1) DDL문장이 실행될 때(CREATE, ALTER, DROP, TRUNCATE, COMMENT) commend?? or comment
2) DCL(GRANT, REVOKE)
3) sqlplus 에서 exit를 수행해서 종료
4) sqlplus에서 다른 유저로 접속할 때, connect(conn) insa/oracle
■ 자동 ROLLBACK
- sqlplus 비정상적인 종료(x로 창닫기)
- DML 작업을 수행하고있는 컴퓨터가 비정상적인 종료가 될 때
- client - server 환경에서 네트워크 장애가 발생하는 경우
■INSERT SUBQUERY(SELECT문)
- 언제 사용해? 데이터 이관하는 방법! CTAS로 컬럼 이름만 가져온 빈 테이블 만든 후 이관하기
- INSERT INTO 소유자명.테이블명(컬럼, 컬럼,)
SELECT문장
■UPDATE SUBQUERY
--새로운 값으로 수정하고싶은데 이 값을 다른 테이블에서 가져와서 수정해야 할 때 subquery절 사용한다.