DAY-27. Oracle DML,TCL,DCL,View,Sequence
π 2022-04-07
λ°μ΄ν°λ² μ΄μ€
β μμ μ λ£κ³ , κ°μΈμ΄ 곡λΆν λ΄μ©μ μ μ κ² μ΄κΈ°μ μ€λ₯κ° λ§μ μλ μμ
1οΈβ£ DML (Data Manipulation Language)
λ°μ΄ν° μ‘°μμ΄
- λ°μ΄ν°λ₯Ό μ½μ , μμ , μμ , μ‘°ννλ μΈμ΄ β insert, update, delete, select
insert
ν μ΄λΈμ μλ‘μ΄ νμ μΆκ°ν λ μ¬μ©νλ ꡬ문
1) λͺ¨λ νμ λν λ°μ΄ν°λ₯Ό μΆκ°νκ³ μ ν λ μ¬μ©νλ ꡬ문 (ν νλ λΉΌμ§μκ³ λ£μ λ)
insert into ν μ΄λΈλͺ values(μ λ ₯ν λ°μ΄ν°, μ λ ₯ν λ°μ΄ν°β¦)
2) νΉμ ν 컬λΌμλ§ λ°μ΄ν°λ₯Ό λ£κ³ μΆμ κ²½μ° μ¬μ©νλ ꡬ문 :
insert into ν μ΄λΈλͺ (컬λΌλͺ 1, 컬λΌλͺ 2β¦) values (μ λ ₯λ°μ΄ν°1, μ λ ₯λ°μ΄ν°2β¦)
// ν
μ΄λΈ μμ±
create table member (
id varchar2(100) primary key
, pw varchar2(100) not null
, nickname varchar2(100) unique
, email varchar2(100)
);
// ν
μ΄λΈ μ‘°ν
select * from member;
// ν
μ΄λΈ μ½μ
insert into member values ('abc123','abc','ABCμ΄μ½λ¦Ώ','abc@naver.com');
insert into member (id,pw) values ('eee555','eEE');
// 묡μμ νλ³ν -> μ€λΌν΄μ΄ μλμΌλ‘ μλ£νμ μΆμΈ‘νμ¬ λ³νν΄μ£Όλκ²
insert into member values(123,sysdate,'ffd','abc@naver.com');
update
컬λΌμ μ μ₯λ λ°μ΄ν°λ₯Ό μμ νλ ꡬ문 β ν μ΄λΈμ μ 체 ν κ°μμ λ³νλ₯Ό μ£Όμ§ μμ
update ν μ΄λΈλͺ set λ³κ²½ν 컬λΌλͺ = λ³κ²½ν κ°β¦ where 쑰건
//μ΄λλ‘ νλ©΄ κΈ°μ‘΄νμ λͺ¨λ μ΄λ©μΌμ΄ eee@gamil.comμΌλ‘ λ³κ²½ λλ€.
update member set email = 'eee@gmail.com';
//μμ΄λκ° abc123μΈ νμ μ΄λ©μΌλ§ abc@naver.comμΌλ‘ λ³κ²½
update member set email = 'abc@naver.com' where id ='abc123';
// 2κ° μ΄μμ μ»¬λΌ λ³κ²½ μμ΄λκ° eee555μΈ μ¬λμ pwμ nickname λ³κ²½
update member set pw = '1234', nickname = 'μ΄ν°' where id = 'eee555';
delete
ν μ΄λΈμ νμ μμ νλ ꡬ문 β νμ κ°μμ λ³νκ° μκΉ
- 쑰건문μ κ±Έμ΄μ£Όμ§ μμΌλ©΄ ν μ΄λΈμ λͺ¨λ λ°μ΄ν°κ° μμ λ¨.
- delete from ν μ΄λΈλͺ where 쑰건
// idκ° 200μΈ μ¬λ μμ
delete from member where id = '200';
// μ 체μ ν
μ΄λΈ μμ
delete from member;
truncate
ν μ΄λΈμ μ 체 νμ μμ ν λ μ¬μ©νλ ꡬ문
- λλ릴 μ μμ β μꡬμ μΌλ‘ μμ
// rollback / commit
commit;
select * from member;
delete from member;
rollback;
2οΈβ£ TCL (Transcation Control Language)
νλ²μ μνλμ΄μΌνλ μμ μ λ¨μ
ex) ATM
- μΉ΄λ μ½μ
- λ©λ΄ μ ν(μΈμΆ)
- κΈμ‘ νμΈ / λΉλ°λ²νΈ μΈμ¦
- μ¬μ©μκ° μ λ ₯ν κΈμ‘μ΄ ν΄λΉ κ³μ’μμ λ½μ μ μλ κΈμ‘μΈμ§ νμΈ
- μ€μ νκΈ λΏ
- μΉ΄λ λ½κ³ λ
== νκΈμ μΈμΆνλ€ μμ
β 6λ²κΉμ§ μμ μ΄ μ μμ μΌλ‘ μλ£κ° λμ λ β COMMIT (μ΅μ’ μ μ₯)
β 6λ²κΉμ§μ μμ μ€μμ νλλΌλ λΉμ μ νλ¦μ΄ λ°μνλ©΄ κ·Έλλ λͺ¨μ μμ μ rollback(μ·¨μ)
- commit : νΈλμμ μμ μ΄ μ μμ μΌλ‘ μλ£λλ©΄ λ³κ²½ λ΄μ©μ μꡬμ μΌλ‘ μ μ₯
- savepoint
: νμ¬ νΈλμμ μμ μμ μλ€κ° μ΄λ¦ λΆμ¬ (νλμ νΈλμμ μμμ ꡬμμ λλλ κ²) - rollback : νΈλμμ μμ μ λͺ¨λ μ·¨μνκ³ μ΅κ·Όμ commit νλ μ§μ μΌλ‘ λμκ°λ κ².
rollback to savepoint λͺ : ν΄λΉ savepointλ‘ λλμ κ°λ€
// ν
μ΄λΈ μμ±
create table tbl_user (
no number unique
, id varchar2(100) primary key
, pw varchar2(100) not null
);
// λ°μ΄ν° μ½μ
insert into tbl_user values(1,'user1','pw1');
insert into tbl_user values(2,'user2','pw2');
insert into tbl_user values(3,'user3','pw3');
select * from tbl_user;
commit;
insert into tbl_user values(4,'user4','pw4 ');
rollback; // κ°μ₯ μ΅μ μ commitλ μνλ‘ λμκ° μ¦ user3 κΉμ§λ§ λμ΄
insert into tbl_user values(4,'user4','pw4 ');
savepoint spl;
insert into tbl_user values(5,'user5','pw5');
rollback to spl; // save ν¬μΈνΈλ₯Ό ν΄μ€κ±°λ user4 κΉμ§μ
select * from tbl_user; // user4κΉμ§λ§ λμ΄
rollback; // savepoint νλκ²λ μλμ΄ μ€μ§ commit νμ λμ λ°μ΄ν°λ§ μΆλ ₯
3οΈβ£ DCL(Data Control Language)
λ°μ΄ν° μ μ΄μ΄
λ°μ΄ν°λ² μ΄μ€μ κ΄ν 보μ, 무결μ±, 볡ꡬ λ± DBMSλ₯Ό μ μ΄νκΈ° μν μΈμ΄
β grant, revoke / TCL(commit, rollback)
grant : μ¬μ©μ λλ role(resource, connect, dba)μ κΆν λΆμ¬
β system/κ΄λ¦¬μ κ³μ μ μ β μκ· μ¬μ©μ μμ± β grant μ μ κΆν λΆμ¬ β 리μμ€ κΆν λΆμ¬
// kh κ³μ μμ μ€ν
drop table coffee;
create table coffee(
name varchar2(50) primary key
,price number not null
,brand varchar2(100) not null
);
// kh κ³μ μμ μ€ν
insert into coffee values ('μΉ΄νλΌλΌ',3500,'NESCAFE');
select * from coffee;
commit;
select * from kh.coffee;
// kh κ³μ μμ μ€ν
// system κ³μ μμ test01 κ³μ νν
kh κ³μ μ΄ κ°μ§κ³ μλ coffee ν
μ΄λΈμ μ κ·Ό κΆν λΆμ¬
grant select on kh.coffee to test01;
commit;
// kh κ³μ μμ μ€ν
// system κ³μ μμ test01 κ³μ νν
kh κ³μ μ coffee ν
μ΄λΈμ λν insert κΆν λΆμ¬
grant insert on kh.coffee to test01;
commit;
// testκ³μ μμ μ€ν
insert into kh.coffee values('λ°λλΌλΌλΌ',6000,'starbucks');
select * from kh.coffee;
// kh κ³μ μμ μ€ν
// revoke -> λΆμ¬λ κΆνμ ν΄μ / νμνλ λͺ
λ Ήμ΄
revoke select, insert on kh.coffee from test01;
// system κ³μ μμ μ€ν khμ κΆνμ νμΈ νλ μμ
select * from dba_role_privs where grantee ='KH';
4οΈβ£ view
νλ μ΄μμ ν μ΄λΈμμ μνλ λ°μ΄ν°λ₯Ό μ νν΄μ μλ‘μ΄ κ°μ ν μ΄λΈμ λ§λ€μ΄ μ£Όλ κ²
- λ·°λ₯Ό ν΅ν΄ λ§λ€μ΄μ§ ν μ΄λΈμ΄ 물리μ μΌλ‘ μ‘΄μ¬νλ κ²μ μλκ³ , λ€λ₯Έ ν μ΄λΈμ λ°μ΄ν°λ§ μ‘°ν©νμ¬ λ³΄μ¬μ£Όλ κ²
- νΉμ κ³μ μ΄ μλ³Έ ν μ΄λΈμ μ κ·Όν΄μ λͺ¨λ ν μ΄ν°(λΆνμν λ°μ΄ν°)μ μ κ·Όνλ κ±Έ λ°©μ§
- λ·°λ₯Ό μμ±νλ κΆν β λ·°μ λ΄μ©μ μμ νλ©΄ β μ€μ μλ³Έ ν μ΄λΈμ λ°μ΄ν°λ μμ λ¨
π‘ create view λ·°μ΄λ¦ as select ꡬ문
- μ€μ ν μ΄λΈμμ λ°μ΄ν°λ₯Ό λ°κΎΈλ©΄ view ν μ΄λΈμμλ λ°μ΄ν°κ° λ°λλ€
// λ·° μμ± κΆν λΆμ¬
grant create view to kh;
// λ·° ν
μ΄λΈ μμ±
// employee -> emp_no, emp_name, email ,phone
create view emp_view as select emp_no, emp_name, email, phone from employee;
select * from emp_view;
// khκ³μ μμ μ€ν
// test01 κ³μ νν
μμμ λ§λ emp_viewμ μ κ·Ό x κ·Έλμ μ κ·Όμ μ£Όλκ²
grant select on kh.emp_view to test01;
commit;
// testκ³μ μμ μ€ν
select * from kh.emp_view;
// testκ³μ μμ μ€ν
select * from kh.emp_view;
// khκ³μ μμ μ€ν
// μ λμΌ -> μ΄λ¦μ κΉλμΌμΌλ‘ μμ
update employee set emp_name = 'κΉλμΌ' where emp_name ='μ λμΌ';
select * from employee;
commit;
// khκ³μ μμ μ€ν
// λ·° μμ
drop view emp_view;
commit;
5οΈβ£ sequence
μμ°¨μ μΌλ‘ μ μ κ°μ μλμΌλ‘ μμ±νλ κ°μ²΄ -> μλ λ²νΈ λ°μκΈ°
- start with μ«μ -> λͺλ²λΆν° λ²νΈλ₯Ό μμν 건μ§
- increment by μ«μ -> λͺ λ¨μλ‘ μ«μλ₯Ό μ¦κ°μν¬κ±΄μ§
- maxvalue μ«μ / nomaxvalue -> μνμ€μ μ΅λκ° μ§μ / μ§μ x
- minvalue μ«μ / nominvalue -> μνμ€μ μ΅μκ° μ§μ / μ§μ x
- cycle / nocycle -> λ§μ½ μ΅λκ°μ λλ¬νλ©΄ μ²μμΌλ‘ λμκ° λ€μ μλ²μ 맀기기 μμν 건μ§
- cache / nocache -> λ©λͺ¨λ¦¬μμ 미리 μνμ€λ₯Ό λ½μ μ¬λ €λκ³ μ¬μ©νλ κ²/ λ©λͺ¨λ¦¬μμ μ¬λ €λμ§ x
create sequence seq_temp
start with 1
increment by 1
maxvalue 10
cycle
nocache;
select * from user_sequences where sequence_name = 'SEQ_TEMP';
select seq_temp.currval from dual; // μλ¬ nextvalλ¨Όμ μ¬μ© ν΄μΌνλ€
select seq_temp.nextval from dual;
select seq_temp.currval from dual;
- nextval : νμ¬ μνμ€μ λ€μ κ°μ λ°νν¨κ³Ό λμμ μνμ€λ₯Ό μ¦κ°
- currval : νμ¬κ°μ λ°ν β μ μνκ³ λμ nextvalμ΄ λ¨νλ²λ μ°μ΄μ§ μμλ€λ©΄ μ¬μ© x (nextvalλ¨Όμ μ¬μ© ν΄μΌνλ€)
1) νμ©
drop sequence seq_temp;
create sequence seq_temp
start with 1
increment by 1
maxvalue 10
cycle
nocache;
select * from user_sequences where sequence_name = 'SEQ_TEMP';
select seq_temp.nextval from dual;
select seq_temp.currval from dual;
select * from coffee;
delete from coffee where name in ('1','2');
// insert into coffee values(1,4000,'Max');
// insert into coffee values(2,4000,'Max');
// μμ μ½λμ²λΌ νμ§μκ³ seqλ₯Ό μ¬μ©
insert into coffee values(seq_temp.nextval,4000,'Max');
insert into coffee values(seq_temp.nextval,4000,'Max');
Leave a comment