SQL

DDL(Data Definition Language, 데이터 정의어) ==> create, drop, alter, truncate

에어팟맥스 2022. 7. 12. 17:49

  -- DDL(Data Definition Language) : 데이터 정의어 ==> create, drop, alter, truncate
   
   --> 여기서 중요한 것은 DDL문을 실행하면 자동적으로 commit; 이 된다는 것이다.

 


100번 사원의 정보 변경

   select *
   from employees
   where employee_id = 100;
   -- salary ==> 24000
   -- email ==> SKING
   
   update employees set salary = 54321, email = 'dfsdfsd'
   where employee_id = 100;
   -- 1 행 이(가) 업데이트되었습니다.
   create table tbl_temp
   (no number
   , name varchar2(20)
   );
   -- Table TBL_TEMP이(가) 생성되었습니다.
   
   -- DDL 문을 실행했으므로 자동적으로 auto commit;
   
   select *
   from employees
   where employee_id = 100;
   
   rollback;
   -- 롤백 완료.
   
   select *
   from employees
   where employee_id = 100;
   -- 위에서 DDL문(create)을 실행했으므로 자동적으로 commit; 이 되었기 때문에 rollback 안됨.
   select *
   from employees@TEACHERSERVER;
   
   update employees set email = 'abcd';
   
   select *
   from employees;
   
   update employees set last_name = '몰라';
   -- 107개 행 이(가) 업데이트되었습니다.
   
   commit;

   -- 깨진 DB링크 복구

  select *
   from employees;
   
   update employees LE set first_name = ( select first_name from employees@TEACHERSERVER where employee_id = LE.employee_id )
                      , last_name = ( select last_name from employees@TEACHERSERVER where employee_id = LE.employee_id )
                      , salary = ( select salary from employees@TEACHERSERVER where employee_id = LE.employee_id )
                      , email = ( select email from employees@TEACHERSERVER where employee_id = LE.employee_id );
   -- 깨진 DB링크 복구
   
   commit;

 

 


   ------ ====== **** TRUNCATE table 테이블명; **** ====== ------  
    --> TRUNCATE table 테이블명; 을 실행하면 테이블명 에 존재하던 모든 행(row)들을 삭제해주고,
    --  테이블명에 해당하는 테이블은 완전초기화 가 되어진다.
    --  중요한 사실은 TRUNCATE table 테이블명; 은 DDL 문이기에 auto commit; 되어지므로 rollback 이 불가하다.
   
    --  delete from 테이블명; 을 실행하면 이것도 테이블명 에 존재하던 모든 행(row)들을 삭제해준다.
    --  이것은 DML문 이므로 rollback 이 가능하다.
   

 

   create table tbl_emp_copy1
   as
   select * from employees;
   -- Table TBL_EMP_COPY1이(가) 생성되었습니다.
   
   select *
   from tbl_emp_copy1;
   
   delete from tbl_emp_copy1;
   -- 107개 행 이(가) 삭제되었습니다.
   
   select count(*)
   from tbl_emp_copy1; -- 0
   
   rollback;
   select count(*)
   from tbl_emp_copy1; -- 107
   
   truncate table tbl_emp_copy1;
   -- Table TBL_EMP_COPY1이(가) 잘렸습니다.
   
   select *
   from tbl_emp_copy1; -- 데이터 없음
   
   select count(*)
   from tbl_emp_copy1; -- 0
   
   rollback; -- auto commit; 이 되었으므로 rollback 해도 소용이 없음