DML 데이터 조작어

김상범·2021년 1월 13일
0

insert

새로운 레코드를 추가 한번에 하나의 테이블에 입력하는 방법

insert into dept(deptno, dname, loc) values(90,'인사과','서울');
-- 순서는 상관없다.
insert into dept values(70 , '인사과','서울');
--같은 방법으로 실행이 가능하다.
insert into dept(deptno, dname) values(91,'인사과');
--묵시적인 null체크방법 (loc가 null 이 허용 될 경우에만 사용 가능)
insert into dept values(92,'인사과',NULL); 
--명시적인 null 체크 방법 null대신 빈 문자열 '' 도 가능하다.

CATS

create table copy_emp
AS
SELECT empno, ename from emp
where job = 'SALESMAN';
--테이블을 복사한다. CATS 라고도 불림 crate table AS
insert into copy_emp (empno, ename)
select empno, ename from emp;

insert all

create table sal_history
as
select empno, hiredate, sal
from emp 
where 1=2;

create table mgr_history
as
select empno, mgr, sal
from emp
where 1=2;

insert all
into sal_history values(empno,hiredate,sal)
into mgr_history values(empno,mgr , sal)
select empno, hiredate, sal , mgr
from emp;
insert all
when sal<2500 then into sal_history values(empno,hiredate,sal)
when sal>2500 then into mgr_histroy values(empno,mgr,sal)
select empno,hiredate,salk,mgr
from emp;

insert first

  • if else문과 비슷함
insert first
when sal = 800 then into sal_history values(empno,hiredate,sal)
when sal <= 2500 then into mgr_history values(empno,mgr,sal)
else into test_history values(empno,sal) 
select empno, hiredate,sal ,mgr
from emp;

update

테이블에 저장된 행들을 변경한다. 한번에 여러 행을 변경 가능하다.

update table
set column = value() 
where condition
update dept set dname = '경리과' , loc ='붓산' 
where deptno =90;

delete

테이블에 저장된 행들을 삭제한다 한번에 여러 행을 삭제 가능하다

DELETE from dept
where deptno = 91;
delete from copy_dept;
--테이블제거
ROLLBACK ;
--되살리기

merge

구조가 같은 두개의 테이블을 비교해서 하나로 합치기 when 조건절을 사용하고 대상테이블에 해당행이 존재하면 update 존재하지 않으면 Insert가 사용된다.

merge into () using() on() when then ~
create table pt_01(판매번호 varchar2(8), 제품번호 number,수량 number , 금액 number);
create table pt_02(판매번호 varchar2(8), 제품번호 number,수량 number , 금액 number);
create table p_total(판매번호 varchar2(8), 제품번호 number,수량 number , 금액 number);
insert into pt_01 VALUES('20150101','1000',10,500);
insert into pt_01 VALUES('20150102','1001',10,400);
insert into pt_01 VALUES('20150103','1002',10,300);
insert into pt_02 VALUES('20150201','1003',5,500);
insert into pt_02 VALUES('20150202','1004',5,400);
insert into pt_02 VALUES('20150203','1005',5,300);

merge into p_total total
using pt_01 p01
on(total.판매번호 = p01.판매번호)
when matched then
    update set total.제품번호 = p01.제품번호
when not matched then
    insert values(p01.판매번호, p01.제품번호, p01.수량 ,p01.금액)

merge into p_total total
using pt_02 p02
on (total.판매번호 = p02.판매번호)
when matched then
update set total.제품번호 = p02.제품번호
when not matched then
insert values (p02.제품번호,p02.판매번호,p02.수량,p02.금액);

transaction

데이터베이스의 논리적인 작업 단위 전부적용 or 전부 취소 되는 특성

  • 시작 : dml 실행시 자동으로 시작한다.
  • 끝 : commit or rollback ddl dcl 문장을 실행한 경우
  • 연관된 작업을 그룹하 하기 위함
  • 트랜잭션 종료 전까진 모두가 다 임시 데이터
  • 변경이 된 행은 lock 이 걸리며 해당 사용자를 제외한 다른 사람은 사용 못함
insert into copy_dept values(1,'AA','AA');
--insert 실행 순간 tx 발생 완료하려면 commit rollback 두개중 하나를 실행해야 한다.
--tx 종료됨
rollback;
	-- tx 실행 안함 db 반영하지 않음
insert into copy_dept values(1,'AA','AA');
commit; 
-- db 반영
	--commit 이후 rollback 하게 되면 db에 반영되어있는 자료는 rollback 되지 아니함
commit; 
--변경사항 db에 반영
  • 읽기 일관성 : 사용자에게 가장 최근 커밋된 데이터를 보여줌 다른 사용자들이 변경중인 데이터를 볼 수 없음
profile
아기개발자

0개의 댓글