본문 바로가기

Programming/국비학원

220905 - 오라클 - 데이터 정의어, 데이터 조작어, 트랜잭션

  • DDL (데이터 정의어) - 테이블 생성, 수정, 삭제
  • 테이블 생성

CREATE TABLE 테이블명(컬럼명 타입,..);

1. 구조만 복사
create table dept_third as select * from department where 0=1;

2. 복사
create table dept_second as select * from department;

3. 조건부 복사
create table emp20 as select eno, ename, salary*12 totsal from employee where dno=20;

 

 

  • 테이블 수정 

1. 컬럼 추가
ALTER TABLE 테이블명 ADD 컬럼명 타입;

2. 컬럼 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 타입;

3. 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;

4. 테이블 이름 변경
RENAME 기존 테이블명 TO 새 테이블명;

 

 

 

  • 테이블 삭제

DROP TABLE 테이블명;

 

 

  • 데이터 삭제 (테이블 구조는 유지)

TRUNCATE TABLE 테이블명;



 

  • DML (데이터 조작어)
  • INSERT : 테이블에 내용 추가

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

 

 

  • UPDATE : 테이블 내용 수정

UPDATE 테이블명 SET 변경할 컬럼명=변경값, .. WHERE 조건; 

ex. update dept_copy set dname='PROGRAMMING' where dno=10;
ex. update dept_copy set dname='PROGRAMMING', loc='SEOUL' where dno=10;
ex. update dept_copy set loc=(select loc from dept_copy where dno=20) where dno=10;
ex. update dept_copy set (dname, loc)=(select dname, loc from dept_copy where dno=30) where dno=10;

 

 

 

  • DELETE : 테이블 내용 삭제

DELETE 테이블명 WHERE 조건;


 

 

  • TRANSACTION (COMMIT, ROLLBACK)

: 여러 DML이 모여 하나의 트랜잭션으로 구성됨 

=> dml 작업 후 commit/rollback으로 트랜잭션 종료해야 함

데이터의 일관성 보장

 

 

  •  

COMMIT(확정) : 모든 작업 정상 처리해 확정, 영구 저장 => 트랜잭션 종료
ROLLBACK(되돌리기) : 트랜잭션 처리 과정에서 발생한 변경사항 취소 (commit 안 돼있으면 모든 작업 삭제) => 트랜잭션 종료

 

 

 

 

문제

○ 사원정보테이블에서 사원번호, 이름, 급여만 가지는 테이블 생성, 자료 복사(영업사원 자료만)

create table emp_sales as select eno, ename, salary from employee where job='SALESMAN';



○ emp 테이블 생성 (eno number(4), ename varchar2(20), dno number(2))

create table emp(eno number(4), ename varchar2(20), dno number(2));



○ ename 커럼 크기 30 변경

alter table emp modify ename varchar(30);



○ employee 테이블 복사, employee2 로 생성 / 사원번호, 이름, 급여, 부서번호 컬럼만 복사 (emp_id, emp_name, sal, dept_id)

create table employee2(emp_id, emp_name, sal, dept_id) as select eno, ename, salary, dno from employee;



○ employee 테이블 구조만 복사, emp_insert 빈테이블 제작

create table emp_insert as select * from employee where 0=1;

 


○ 본인을 emp_insert 테이블에 추가, 입사일은 오늘

insert into emp_insert values(1,'hk','student',null,'2022,09,05',4000,10000,20);

 


○ 사원번호 7788 사원 부서번호 10으로 수정

update emp_copy set dno=10 where eno=7788;

 



○ 사원번호 7788의 담당업무, 급여를 사원번호 7749 와 일치하도록 갱신

//update emp_copy set job=(select job from emp_copy where eno=7499), salary=(select salary from emp_copy where eno=7499) where eno=7788;

update emp_copy set (job,salary) = (select job, salary from emp_copy where eno=7499) where eno=7788;